Lambda表达式是对参数为函数式接口(接口中只有一个抽象方法)的一种简写实现方式。
例子:
实现Consumer接口重写accept()
方法:
public static void main(String[]args){
Stream<String> stream = Stream.of("aaa","bbb","ccc");
stream.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
}
使用Lambda表达式优化:
public static void main(String[]args){
Stream<String> stream = Stream.of("aaa","bbb","ccc");
stream.forEach(name ‐> System.out.println(name));
}
利用方法引用进一步简化Lambda表达式:
public static void main(String[]args){
Stream<String> stream = Stream.of("aaa","bbb","ccc");
stream.forEach(System.out :: println);
}
方法引用优化:
双冒号::
为引用运算符,而它所在的表达式被称为方法引用。如果Lambda要表达的函数方案已经存在于某个方法的实现中,那么则可以通过双冒号来引用该方法作为Lambda的替代者。
- Lambda表达式写法:
s->System.out.println(s);
- 方法引用写法:
System.out::println;
第一种语义是指:拿到参数之后经Lambda之手,继而传递给System.out.println方法去处理。
第二种等效写法的语义是指:直接让System.out中的println方法来取代Lambda。两种写法的执行效果完全一样,而第二种方法引用的写法复用了已有方案,更加简洁。
注:Lambda中传递的参数一定是方法引用中的那个方法可以接收的类型,否则会抛出异常。