1、lambda 表达式1 ,
Arrays.asList("s","vo").forEach(System.out::println); // A
Arrays.asList("s","vo").forEach(o->System.out.println(o)); // B
这里涉及到3个知识点
a. java8新增了函数指针这个概念,就是使用 “::” 来引用一个方法,入 System.out::println
b. java8 新增了 函数式接口(通过注解@FunctionalInterface 的接口,只允许含有一个方法,此接口表示函数式接口)System.out::println 会返回一个 “函数式” ,我们可以看forEach 的参数是什么:
void forEach(Consumer<? super T> action);
Consumer 是一个被注解为 @FunctionalInterface 的接口。 编译器会将 “System.out::println” 实现成一个 Consumer :
new Consumer(String s){
System.out.println(s);
}
c.lambda 表达式目前看来都是在一个方法调用时的参数中,该方法必须可以接收一个 “函数式接口” 作为参数。
个人看法:
lambda 的表达式,形式类似于 () -> {}
()表示输入参数 ,{} 表示函数体。 如果()中的参数只有1个,那么可以省略括号。 相同,如果 {} 内部只有一条语句,也可以省略花括号。
这就属于lambda 表达式。
下面是一个2个参数的 lambda 的表达式例子:
Arrays.asList("s","vo").sort((f,o)-> f.length() - o.length());
其最终都是由编译器自动去实现 “函数式接口” 接口。