Java运算符篇之Lambda运算符

举报
bug菌 发表于 2024/05/29 23:09:31 2024/05/29
【摘要】 咦咦咦,各位小可爱,我是你们的好伙伴 bug菌,今天又来给大家手把手教学Java SE系列知识点啦,赶紧出来哇,别躲起来啊,听我讲干货记得点点赞,赞多了我就更有动力讲得更欢哦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~

  咦咦咦,各位小可爱,我是你们的好伙伴 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));

代码解读:

  根据如上代码作出如下解析,以便于同学们更好的理解与掌握它:

  这段代码的作用是将字符串列表中的每个字符串的长度提取出来,并保存到整数列表中,然后遍历整数列表并打印每个整数。解析如下:

  1. 首先,我们有一个字符串列表strings,其中包含了4个字符串元素。

  2. 使用Arrays.asList()方法将字符串数组转换为列表。

  3. 使用流(Stream)的map()操作来对每个字符串进行映射操作,将其转换为字符串的长度。

  4. 使用toList()方法将流(Stream)转换为列表。

  5. 将长度列表保存到lengths变量中。

  6. 使用forEach()方法遍历整数列表,并使用System.out.println()打印每个整数。

因此,这段代码的输出将会是:

1
2
3
4

优缺点分析

优点

  • 简洁性:Lambda表达式可以大大减少样板代码,使代码更加简洁。
  • 可读性:在适当的场景下,Lambda表达式可以提高代码的可读性。
  • 并行性:与流(Streams)结合使用时,Lambda表达式可以简化并行处理。

缺点

  • 调试困难:Lambda表达式的匿名特性可能使调试变得困难。
  • 复杂性:对于不熟悉Lambda表达式的开发者,初期学习曲线较陡。

类代码方法介绍

  Lambda表达式通常用于实现函数式接口。Java标准库中提供了许多常用的函数式接口,如RunnableCallableComparator等。

测试用例

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电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。