🥳🥳Welcome Huihui's Code World ! !🥳🥳
接下来看看由辉辉所写的关于lambda表达式的相关操作吧
目录
🥳🥳Welcome Huihui's Code World ! !🥳🥳
一.是什么
Lambda 是一个 匿名函数 ,我们可以把 Lambda表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java语言表达能力得到了提升
二.为什么要用
在此之前,使用匿名内部类来完成,而使用匿名内部类的方式,相对冗余
Lambda表达式与匿名内部类的区别
- 所需类型不一样,匿名内部类需要的类型可以是类,也可以是抽象类,接口;而lambda表达式需要的类型必须是接口
- 抽象方法的数量不一样,匿名内部类所需的接口中的方法的数量随意,但lambda表达式只能有一个抽象方法
- 实现原理不同,匿名内部类是在编译之后形成class,而lambda文件时在程序运行的时候动态生成class
综上,lambda表达式比匿名内部类要更加方便,因此出现了lambda表达式来替代它
三.底层
- 函数式编程思想,将需要执行的代码放入函数(相当类里面的方法)中即可
- 底层逻辑
- 在类里面新增一个方法,这个方法就是lambda表达式中的代码
- 还会形成一个匿名内部类
- 在接口中重写方法中会调用新生成
四.什么时候用
- 方法的参数或者局部变量是一个接口
- 接口中有且只有一个抽象方法
- 检测是否只有一个抽象方法
五.怎么用
- 格式:左侧是参数列表,接着是->【起到连接的作用,连接左右两侧】,右侧是方法体
- 省略
- 小括号内的参数类型可以省略
- 如果小括号内有且只有一个参数,那么小括号可以省略
- 如果大括号内有且只有一个语句,那么return和大括号,语句分号都可以省略
💡辉辉小贴士:十个必须掌握的lambda表达式
1. 使用lambda表达式定义函数类型的变量:
Function<Integer, Integer> square = x -> x * x;
2. 使用lambda表达式遍历集合:List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.forEach(x -> System.out.println(x));
3. 使用lambda表达式过滤集合:List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream().filter(x -> x % 2 == 0).forEach(x -> System.out.println(x));4. 使用lambda表达式对集合进行排序:
List<Integer> list = Arrays.asList(5, 1, 3, 4, 2);
list.sort((x, y) -> x - y);
5. 使用lambda表达式对集合进行计算:List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = list.stream().reduce(0, (x, y) -> x + y);
6. 使用lambda表达式定义线程:new Thread(() -> System.out.println("Hello World")).start();
7. 使用lambda表达式定义事件监听器:button.addActionListener(event -> System.out.println("Button clicked"));
8. 使用lambda表达式处理异常:handleException(ex -> System.out.println("Exception caught: " + ex.getMessage()));
9. 使用lambda表达式处理Optional对象:Optional<Integer> optionalValue = getValue();
optionalValue.ifPresent(value -> System.out.println("Value: " + value));
10. 使用lambda表达式实现接口的默认方法:interface MyInterface {
default void myDefaultMethod() {
System.out.println("Default method");
}
}
好啦,今天的分享就到这了,希望能够帮到你呢! 😊😊