在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真是太赞了!!!
回复列表: