实现原理
- lambda表达式是java 8 中的一个新特性,本质上是提供的JDK一个语法糖,实现方式主要是依赖了jvm中的几个lambda相关的api, 并不是通过内部类的机制实现的。
- 通过反编译可以看到调用的是java.lang.invoke 下面的相关方法
- 所以在编译阶段,编译器就会对lambda表达式进行解糖,转换为普通代码
- lambda表达式其实就是匿名函数,表示方法就是 函数参数 -> 具体逻辑
使用方式举例
配合foreach快速遍历集合
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(new Integer(i));
}
list.forEach(a -> System.out.print(a + " "));
}
}
在stream流中过滤元素
// 过滤掉奇数元素
list.stream().filter(a -> a % 2 == 0).forEach(a -> System.out.print(a + " "));
对元素排序
这个实现是通过匿名函数的方式 实现Comparator接口中其中的方法,从而创建匿名内部类 也是实现函数式接口 的一个例子
// 让元素倒序排列
Collections.sort(list,(a,b) -> b - a);
lambada表达式实现函数式接口
函数式接口是在java 8 中提出的一个新概念,它的特点有
- 接口只有一个抽象方法
- 可以通过lambda表达式实现
- 可以作为方法引用的目标