Lambda
为什么要使用lambda表达式
lambda表达式是一个匿名函数,更简洁、灵活,是一种紧凑的代码风格。
lambda表达式的本质
接口的实例
对比
//不使用lanbdaRunnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("测试");}};//使用Runnable runnable1 = () -> System.out.println("测试");runnable1.run();//不使用Comparator<Integer> comparator = new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {// TODO Auto-generated method stubreturn Integer.compare(o1, o2);}};//使用Comparator<Integer> comparator1 = (o1,o2) -> Integer.compare(o1, o2);//方法引用Comparator<Integer> comparator2 = Integer :: compare;
lambda的使用
- 举例: (o1,o2)-> Integer.compara(o1,o2);
- 格式
- -> :lambda操作符或者箭头操作符
- ->左边: lambda形参列表(接口中抽象方法的形参列表)
- ->右边:lanbda体(抽象方法的方法体)
lambda表达式的使用:
//1. 语法格式一:无参,无返回值Runnable runnable1 = () -> {System.out.println("测试");};//2. 语法格式二:有一个参数,无返回值Consumer<String> consumer = (String t) -> {System.out.println(t);};//3. 语法格式三:数据类型可以省略,因为可以由编译器推断得出,称为“类型推断”Consumer<String> consumer1 = (t) -> {System.out.println(t);};//4. 语法格式四:若有左边的形参只有一个,可以省略小括号Consumer<String> consumer2 = t -> {System.out.println(t);};//5. 语法格式五:若需要两个以上的参数,多条执行语句,并且可以由返回值Comparator<Integer> comparator = (o1,o2) -> {System.out.println(o1);System.out.println(o2);return Integer.compare(o1, o2);};//6. 语法格式六:若只有一条执行语句,retuen和大括号若有都可以省略Comparator<Integer> comparator1 = (o1,o2) -> Integer.compare(o1, o2);
总结
->左边:参数类型可以省略(类型推断),如果只有一个参数,可以省略小括号
- ->右边:如果只有一条执行语句,可以省略return和大括号,
- 接口只有一个抽象方法(函数式接口)
