Java运算符篇之Lambda运算符
咦咦咦,各位小可爱,我是你们的好伙伴 bug菌,今天又来给大家手把手教学Java SE系列知识点啦,赶紧出来哇,别躲起来啊,听我讲干货记得点点赞,赞多了我就更有动力讲得更欢哦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8
前言
在现代Java编程中,Lambda表达式(Lambda运算符)极大地简化了代码的编写,尤其是在处理集合和流操作时。本文将详细探讨Java中的Lambda运算符,包括其用法、优势、局限性以及实际应用场景,帮助开发者更好地掌握这一强大的工具。
摘要
本文介绍了Java中的Lambda运算符,通过概述其用法、源代码解析、实际应用场景、优缺点分析等,帮助读者全面理解和有效运用Lambda运算符。并通过测试用例展示如何在实际开发中使用该运算符。
概述
Lambda表达式在Java 8中引入,是一种匿名函数,用于实现仅有一个方法的接口(通常称为函数式接口)。Lambda表达式的基本语法格式为:
(parameters) -> expression
或
(parameters) -> { statements; }
Lambda表达式可以使代码更加简洁,尤其是在集合操作和流处理时。
源代码解析
示例代码
package com.example.javase.bugTest.operator.lambda;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author bug菌
* @Source 公众号:猿圈奇妙屋
* @Date 2024-05-27 23:38
*/
public class LambdaExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "banana", "cherry");
// 使用Lambda表达式打印列表
list.forEach(item -> System.out.println(item));
// 使用Lambda表达式进行字符串转换
List<String> upperList = list.stream()
.map(item -> item.toUpperCase())
.collect(Collectors.toList());
upperList.forEach(item -> System.out.println(item));
}
}
代码解读:
根据如上代码作出如下解析,以便于同学们更好的理解与掌握它:
这段代码是一个使用Lambda表达式的示例,包含了两个例子:使用Lambda表达式打印列表和使用Lambda表达式进行字符串转换。首先,我们通过Arrays.asList()方法创建了一个包含三个元素的字符串列表。然后,我们使用forEach()方法和Lambda表达式打印列表中的每个元素。Lambda表达式的语法是item -> System.out.println(item),其中item是列表中的每个元素。接下来,我们使用stream()方法将列表转换为流,并使用map()方法和Lambda表达式将每个元素转换为大写字符串。Lambda表达式的语法是item -> item.toUpperCase(),其中item是流中的每个元素。最后,我们使用collect()方法将流转换为列表,并使用forEach()方法和Lambda表达式打印新列表中的每个元素。
通过运行这段代码,我们可以看到原始列表中的元素被按顺序打印出来,然后转换为大写的字符串被打印出来。
本地实际运行结果展示如下,有条件的同学们也可以自己本地实践一下。
解析
list.forEach(item -> System.out.println(item));
:使用Lambda表达式遍历并打印列表中的每个元素。list.stream().map(item -> item.toUpperCase()).toList();
:使用Lambda表达式将列表中的每个字符串转换为大写,并收集为新的列表。
应用场景案例
场景一:集合遍历
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.forEach(number -> System.out.println(number));
代码解读:
根据如上代码作出如下解析,以便于同学们更好的理解与掌握它:
这段代码创建了一个整数列表numbers,并使用Arrays.asList()方法将数字1,2,3,4,5添加到列表中。然后使用forEach()方法来遍历列表中的每个元素。在这个例子中,使用lambda表达式来定义一个打印每个数字的动作。在lambda表达式中,参数number代表列表中的每个元素,箭头后面的代码System.out.println(number)表示要执行的操作,即打印当前数字。
最终,通过调用forEach()方法,代码将遍历列表中的每个元素,并打印出来。输出结果将会依次是1, 2, 3, 4, 5。
场景二:流操作
List<String> strings = Arrays.asList("a", "bb", "ccc", "dddd");
List<Integer> lengths = strings.stream()
.map(s -> s.length())
.toList();
lengths.forEach(length -> System.out.println(length));
代码解读:
根据如上代码作出如下解析,以便于同学们更好的理解与掌握它:
这段代码的作用是将字符串列表中的每个字符串的长度提取出来,并保存到整数列表中,然后遍历整数列表并打印每个整数。解析如下:
-
首先,我们有一个字符串列表
strings
,其中包含了4个字符串元素。 -
使用
Arrays.asList()
方法将字符串数组转换为列表。 -
使用流(Stream)的
map()
操作来对每个字符串进行映射操作,将其转换为字符串的长度。 -
使用
toList()
方法将流(Stream)转换为列表。 -
将长度列表保存到
lengths
变量中。 -
使用
forEach()
方法遍历整数列表,并使用System.out.println()
打印每个整数。
因此,这段代码的输出将会是:
1
2
3
4
优缺点分析
优点
- 简洁性:Lambda表达式可以大大减少样板代码,使代码更加简洁。
- 可读性:在适当的场景下,Lambda表达式可以提高代码的可读性。
- 并行性:与流(Streams)结合使用时,Lambda表达式可以简化并行处理。
缺点
- 调试困难:Lambda表达式的匿名特性可能使调试变得困难。
- 复杂性:对于不熟悉Lambda表达式的开发者,初期学习曲线较陡。
类代码方法介绍
Lambda表达式通常用于实现函数式接口。Java标准库中提供了许多常用的函数式接口,如Runnable
、Callable
、Comparator
等。
测试用例
package com.example.javase.bugTest.operator.lambda;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author bug菌
* @Source 公众号:猿圈奇妙屋
* @Date 2024-05-27 23:43
*/
public class LambdaTest {
public static void main(String[] args) {
// Test forEach with Lambda
List<String> list = Arrays.asList("apple", "banana", "cherry");
list.forEach(item -> System.out.println("Item: " + item));
// Test map with Lambda
List<String> upperList = list.stream()
.map(item -> item.toUpperCase())
.collect(Collectors.toList());
upperList.forEach(item -> System.out.println("Uppercase Item: " + item));
// Test custom Lambda function
int result = operate(5, 3, (a, b) -> a + b);
System.out.println("Result of addition: " + result);
}
private static int operate(int a, int b, Operation operation) {
return operation.apply(a, b);
}
interface Operation {
int apply(int a, int b);
}
}
测试结果
针对如上测试代码,这里我本地进行实际测试一波,结果仅供参考,有条件的同学们也可以自己本地实践一下。
测试代码解析
针对如上测试代码,这里我再具体给大家讲解下,希望能够更透彻的帮助大家理解。
该代码段展示了在Java中使用Lambda表达式的示例。首先,创建一个String类型的列表list
,并使用Arrays.asList()
方法将元素添加到列表中。然后,使用list.forEach()
方法和Lambda表达式遍历列表并打印每个元素。接下来,使用流(Stream)的map()
方法将每个元素转换为大写字母,并使用collect(Collectors.toList())
方法将结果收集到另一个列表upperList
中。然后,使用自定义的Lambda函数Operation
对两个整数进行操作。Operation
是一个接口,它定义了一个apply()
方法来执行操作。在operate()
方法中,使用传入的Lambda表达式执行操作,并返回结果。最后,在主方法中测试了以上三种使用Lambda表达式的情况,并打印结果。
全文小结
本文详细介绍了Java中的Lambda运算符,通过源代码解析和应用场景案例,展示了其用法及优势,同时也指出了其局限性。通过测试用例,读者可以实际验证Lambda运算符的功能和效果。
总结
Lambda运算符在Java编程中提供了一种简洁高效的方式来处理函数式编程需求,但需要注意避免滥用,尤其是在复杂逻辑中使用。合理地使用Lambda运算符,可以提升代码质量和开发效率。
结尾
希望本文能帮助读者更好地理解和运用Java中的Lambda运算符。如果有任何疑问或建议,欢迎讨论和交流。祝大家编程愉快!
… …
好啦,这期的内容就基本接近尾声啦,若你想学习更多,你可以看看专栏的导读篇《「滚雪球学Java」教程导航帖》,本专栏致力打造最硬核 Java 零基础系列学习内容,🚀打造全网精品硬核专栏,带你直线超车;欢迎大家订阅持续学习。功不唐捐,久久为功!
「赠人玫瑰,手留余香」,咱们下期拜拜~~
附录源码
如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。
☀️建议/推荐你
无论你是计算机专业的学生,还是对编程感兴趣的跨专业小白,都建议直接入手「滚雪球学Java」专栏;该专栏不仅免费,bug菌还郑重承诺,只要你学习此专栏,均能入门并理解Java SE,以全网最快速掌握Java语言,每章节源码均同步「Gitee」,你真值得拥有;学习就像滚雪球一样,越滚越大,带你指数级提升。
码字不易,如果这篇文章对你有所帮助,帮忙给bug菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。
同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!
📣关于我
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 20w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。
- 点赞
- 收藏
- 关注作者
评论(0)