Lambda
为什么要使用lambda表达式
lambda表达式是一个匿名函数,更简洁、灵活,是一种紧凑的代码风格。
lambda表达式的本质
接口的实例
对比
//不使用lanbda
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("测试");
}
};
//使用
Runnable runnable1 = () -> System.out.println("测试");
runnable1.run();
//不使用
Comparator<Integer> comparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return 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和大括号,
- 接口只有一个抽象方法(函数式接口)