lambda表达式
1.举例:(o1, o2) -> Integer.compare(o1, o2)
2. 格式
-> :lambda操作符或者箭头操作符
->左边 :lambda形参列表(其实就是接口中的抽象方法的形参列表)
->右边 :lambda体(其实就是重写的抽象方法的方法体)
3.lambda表达式的本质:作为函数式接口实现类的实例
4.lambda表达式的使用:
分几种情况:
public class Lambda01 { @Test public void test01(){ // 无参数,无返回值 Runnable run = ()-> System.out.println("无返回值"); run.run(); // 有参数,无返回值(数据类型可省略,有接口可推断出类型) Consumer<String> consumer = (s) -> {System.out.println(s);}; consumer.accept("有参数,无返回值"); // 若只有一个参数,参数的小括号可省略 Consumer<String> consumer1 = s -> {System.out.println(s);}; consumer.accept("省略小括号"); // 可以有两个或以上的参数,多条执行语句,而且可以有返回值 //传统匿名内部类写法 Comparator<Integer> comparator = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } }; // lambda写法 Comparator<Integer> comparator1 = (o1, o2) -> { System.out.println(o1); System.out.println(o2); return o1.compareTo(o2); }; System.out.println(comparator1.compare(12, 21)); // 当lambda体只有一条语句时,return 与大括号都可以省略 Comparator<Integer> comparator2 = (o1, o2) -> o1.compareTo(o2); System.out.println(comparator2.compare(22, 21)); }
总结:
->左边:lambda形参列表类型可以省略(类型推断),如果lambda形参只有一个参数,可以省略括号
->右边:lambda体应该使用一对{}包裹,如果lambda体只有一条执行语句(可能是return语句),大括号和return都可以省略。
5.函数式接口
如果一个接口只有一个抽象方法,那么该接口就是函数式接口
可通过lambda表达式来创建该接口的对象
Java一直倡导“一切皆对象”
6.所以以前用匿名实现类表示的现在都可以用lambda表达式来写
7.函数式接口
java内置四大核心函数式接口
原文:https://www.cnblogs.com/yaoqingzhuan/p/14425676.html