Java的函数式接口

在Python里面因为所有的东西都是变量,所以我们可以将一个函数当成参数直接传给一个方法,但是java不是。好在现在有了java8  他有了lambda表达式,可以把一个东西当成函数传给方法。

首先看看四个官方的例子

===================================

// Function<T, R> -T作为输入,返回的R作为输出 

Function<String,String> function = (x) -> {System.out.print(x+": ");return "Function";};

System.out.println(function.apply("hello world"));

//Predicate<T> -T作为输入,返回的boolean值作为输出 

Predicate<String> pre = (x) ->{System.out.print(x);return false;};

System.out.println(": "+pre.test("hello World"));

//Consumer<T> - T作为输入,执行某种动作但没有返回值 

Consumer<String> con = (x) -> {System.out.println(x);};

con.accept("hello world");

//Supplier<T> - 没有任何输入,返回T 

Supplier<String> supp = () -> {return "Supplier";};

System.out.println(supp.get());

//BinaryOperator<T> -两个T作为输入,返回一个T作为输出,对于“reduce”操作很有用 

BinaryOperator<String> bina = (x,y) ->{System.out.print(x+" "+y);return "BinaryOperator";};

System.out.println("  "+bina.apply("hello ","world"));


====

这就是函数的几个小方法。

现在我们只看这个function 也就是一个方法,它是得到一个东西  传出去一个东西

我写的一个小例子


public <T> List<T> dealResult(String query,Function<String,T> function)
{
    List<T> list=new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        T obj=function.apply(query);
        list.add(obj);
    }
    return list;
}
public void dotre()
{
    List<Integer> list=dealResult("sai",this::getength);
    System.out.println("siud");
}
private Integer getength(String str)
{
    return str.length()+3;
}

也就是处理的一个方法,多妙啊 把函数当成一个参数传进去,这个东西真是好用 如果只是想处理内容,而不想返回结果,可以用consumer

如果是判断用predict等等。


这种方法的应用很多:比如我有一个数据库接口,传入的是一个query  传出的是根据这个query检索到的数据库的内容,当然我们希望得到的是整理之后的内容,那么我们就可以把处理这个数据库检索的内容的方法传进去,然后在外面实现它。

JAVA8真是太赞了!!!








留下您的评论

回复列表:

By王炳宁 on May 3, 2016 | 类别 Java

关于本站