Lambda表达式
在Java中使用Lambda表达式可以使得代码更加简洁,Lambda表达式适用于只有一个函数的接口(函数式接口)
Lambda表达式结构
->
: Lambda操作符或箭头操作符
->
右侧的 ()
:Lambda形参列表(接口形参列表)
->
右侧的 {}
:Lambda体(接口具体实现的抽象方法的方法体)
Lambda表达式本质
Lambda表达式用来作为实现接口的实例
Lambda结构
-
无参数 无返回值
情况一:没有参数 没有返回值 将函数替换为() -> {}; 的形式
public void test1(){
//一般写法
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Lambda表达式测试1");
System.out.println("Lambda表达式测试1");
System.out.println("Lambda表达式测试1");
}
};
runnable.run();
//使用Lambda表达式 情况一:没有参数 没有返回值 将函数替换为() -> {}; 的形式
Runnable runnable1 = () -> {
System.out.println("Lambda表达式测试2");
System.out.println("Lambda表达式测试2");
System.out.println("Lambda表达式测试2");
};
runnable1.run();
}
-
一个参数 无返回值
情况二:形参只有一个 没有返回值 可以将()省略 通过类型推断参数类型也可省略
public void test2(){
//一般写法
Consumer<Integer> consumer1 = new Consumer<Integer>() {
@Override
public void accept(Integer i) {
System.out.println(i);
System.out.println(i);
System.out.println(i);
}
};
consumer1.accept(1);
//使用Lambda表达式 情况二:形参只有一个 没有返回值 可以将()省略 通过类型推断参数类型也可省略
Consumer<Integer> consumer2 = i -> {
System.out.println(i);
System.out.println(i);
System.out.println(i);
};
consumer2.accept(2);
}
-
多个参数,仅有一条执行语句(包括return)
情况三:多个参数 单条执行语句(包括返回值) 单条执行语句可以省略{} 如果该语句是return必须省略return
public void test3(){ //一般方式 Comparator<Integer> comparator1 = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } }; comparator1.compare(5,8); //使用Lambda表达式 情况三:多个参数 单条执行语句(包括返回值) 单条执行语句可以省略{} 如果该语句是return必须省略return Comparator<Integer> comparator2 = (o1, o2) -> o1.compareTo(o2); comparator2.compare(6,9); }
注意与总结
Lambda表达式只适用于单个函数的接口(函数式接口),本质上来说就是实现接口的实例 函数式接口.md
在编译器已经知道类型时(泛型…),利用类型推断可以做类型省略;
如果仅有一个参数,则()可以省略;
如果仅有一条执行语句,则{}可以省略
参数和执行语句使用箭头连接
尚硅谷学习笔记!