简化你的代码,提高生产力:这10个Lambda表达式必须掌握

news2024/10/6 22:22:42

前言

  Lambda表达式是一种在现代编程语言中越来越常见的特性,可以简化代码、提高生产力。这篇文章将介绍10个必须掌握的Lambda表达式,这些表达式涵盖了在实际编程中经常用到的常见场景,例如列表操作、函数组合、条件筛选等。通过学习这些Lambda表达式,你将更加深入地理解函数式编程的思想,能够更加高效地编写代码。

1. 使用Lambda表达式进行集合遍历

未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
for (String fruit : list) {
    System.out.println(fruit);
}

使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
list.forEach(fruit -> System.out.println(fruit));

2. 使用Lambda表达式进行排序

未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
Collections.sort(list, new Comparator<String>() {
    public int compare(String s1, String s2) {
        return s1.compareTo(s2);
    }
});

使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
Collections.sort(list, (s1, s2) -> s1.compareTo(s2));

3. 使用Lambda表达式进行过滤

未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> filteredList = new ArrayList<String>();
for (String fruit : list) {
    if (fruit.startsWith("a")) {
        filteredList.add(fruit);
    }
}

使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> filteredList = list.stream().filter(fruit -> fruit.startsWith("a")).collect(Collectors.toList());

4. 使用Lambda表达式进行映射

未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<Integer> lengths = new ArrayList<Integer>();
for (String fruit : list) {
    lengths.add(fruit.length());
}

使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<Integer> lengths = list.stream().map(fruit -> fruit.length())
.collect(Collectors.toList());

5. 使用Lambda表达式进行归约

未使用Lambda表达式:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = 0;
for (int i : list) {
    sum += i;
}

使用Lambda表达式:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = list.stream().reduce(0, (a, b) -> a + b);

6. 使用Lambda表达式进行分组

未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
Map<Integer, List<String>> grouped = new HashMap<Integer, List<String>>();
for (String fruit : list) {
    int length = fruit.length();
    if (!grouped.containsKey(length)) {
        grouped.put(length, new ArrayList<String>());
    }
    grouped.get(length).add(fruit);
}

使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
Map<Integer, List<String>> grouped = list.stream().collect(Collectors.groupingBy(fruit -> fruit.length()));

7. 使用Lambda表达式进行函数式接口的实现

未使用Lambda表达式:

public interface MyInterface {
    public void doSomething(String input);
}

MyInterface myObject = new MyInterface() {
    public void doSomething(String input) {
        System.out.println(input);
    }
};
myObject.doSomething("Hello World");

使用Lambda表达式:

MyInterface myObject = input -> System.out.println(input);
myObject.doSomething("Hello World");

8. 使用Lambda表达式进行线程的创建

未使用Lambda表达式:

Thread thread = new Thread(new Runnable() {
    public void run() {
        System.out.println("Thread is running.");
    }
});
thread.start();

使用Lambda表达式:

Thread thread = new Thread(() -> System.out.println("Thread is running."));
thread.start();

9. 使用Lambda表达式进行Optional的操作

未使用Lambda表达式:

String str = "Hello World";
if (str != null) {
    System.out.println(str.toUpperCase());
}

使用Lambda表达式:

Optional<String> str = Optional.ofNullable("Hello World");
str.map(String::toUpperCase).ifPresent(System.out::println);

10. 使用Lambda表达式进行Stream的流水线操作

未使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> filteredList = new ArrayList<String>();
for (String fruit : list) {
    if (fruit.startsWith("a")) {
        filteredList.add(fruit.toUpperCase());
    }
}
Collections.sort(filteredList);

使用Lambda表达式:

List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> filteredList = list.stream().filter(fruit -> fruit.startsWith("a")).map(String::toUpperCase).sorted().collect(Collectors.toList());

结尾

  如果觉得对你有帮助,可以多多评论,多多点赞哦,也可以到我的主页看看,说不定有你喜欢的文章,也可以随手点个关注哦,谢谢。

  我是不一样的科技宅,每天进步一点点,体验不一样的生活。我们下期见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/412867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JUC源码系列-CountDownLatch源码研读

前言 CountDownLatch是一个很有用的工具&#xff0c;latch是门闩的意思&#xff0c;该工具是为了解决某些操作只能在一组操作全部执行完成后才能执行的情景。例如&#xff0c;小组早上开会&#xff0c;只有等所有人到齐了才能开&#xff1b;再如&#xff0c;游乐园里的过山车&…

运行时内存数据区之堆(二)

Minor GC、Major GC、与Full GC JVM在进行GC时&#xff0c;并非每次都对上面三个内存&#xff08;新生代、老年代&#xff1a;方法区&#xff09;区域一起回收的&#xff0c;大部分时候回收的都是指新生代。 针对HotSpot VM的实现&#xff0c;它里面的GC按照回收区域又分为两…

浅谈 如果做微服务了 这个模块怎么去划分?

如果做微服务了 这个模块怎么去划分&#xff1f; 还是高内聚 低耦合的一个思想吧 &#xff0c;单一职责的设计原则&#xff0c;也是一个封装的思想吧&#xff0c; 业务维度&#xff1a; ​ 按照业务的关联程度来决定&#xff0c;关联比较密切的业务适合拆分为一个微服务&…

C++语法(14)---- 模板进阶

C语法&#xff08;13&#xff09;---- 模拟实现priority_queue_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130069707?spm1001.2014.3001.5501 目录 1.非类型模板参数 2.模板的特化 1.函数模板(仿函数) 2.类模板 1.全特化 2.半特化、偏…

INFINONE XC164单片机逆向记录(6)C语言学习

本人所写的博客都为开发之中遇到问题记录的随笔,主要是给自己积累些问题。免日后无印象,如有不当之处敬请指正(欢迎进扣群 24849632 探讨问题); 写在专栏前面https://blog.csdn.net/Junping1982/article/details/129955766 INFINONE XC164单片机逆向记录(1)资料准备

FusionCharts Suite XT v3.20.0 Crack

FusionCharts Suite XT v3.20.0 改进了仪表的径向条形图和调整大小功能。2023 年 4 月 11 日 - 9:37新版本特征 添加了一个新方法“_changeXAxisCoordinates”&#xff0c;它允许用户将 x 轴更改为在图例或数据交互时自动居中对齐。更新了 Angular 集成以支持 Angular 版本 14 …

【无功优化】基于多目标差分进化算法的含DG配电网无功优化模型【IEEE33节点】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

SAM - 分割一切图像【AI大模型】

如果你认为 AI 领域已经通过 ChatGPT、GPT4 和 Stable Diffusion 快速发展&#xff0c;那么请系好安全带&#xff0c;为 AI 的下一个突破性创新做好准备。 推荐&#xff1a;用 NSDT场景设计器 快速搭建3D场景。 Meta 的 FAIR 实验室刚刚发布了 Segment Anything Model (SAM)&am…

电脑软件:推荐一款Windows剪贴板增强软件——ClipX

目录 ClipX能做什么&#xff1f; 软件优点 软件不足之处 今天要介绍的剪切板神器——ClipX&#xff0c;拥有它可以作为弥补Windows 自带的剪贴板的短板的增强型工具软件。 ClipX能做什么&#xff1f; 1. 扩充剪贴板数量&#xff0c;数量可以自己设置 ClipX支持4到1024个剪…

Flutter(三)--可滚动布局

之前介绍了布局和容器&#xff0c;它们都用于摆放一个或多个子组件&#xff0c;而实际应用中&#xff0c;受限于手机、Pad、电脑的屏幕大小&#xff0c;一个布局不可能摆放无限个组件&#xff0c;我们往往采取滚动的方式&#xff0c;来使得一部分组件展示在屏幕上&#xff0c;一…

L2-041 插松枝PTA

人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上&#xff0c;做成大大小小的松枝。他们的工作流程&#xff08;并不&#xff09;是这样的&#xff1a; 每人手边有一只小盒子&#xff0c;初始状态为空。每人面前有用不完的松枝干和一个推送器&#xff0c;每次推送一…

piwigo安装及初步使用

一 摘要 本文主要介绍piwigo 安装及初步使用&#xff0c;nginx \php\mysql 等使用 docker 安装 二 环境信息 2.1 操作系统 CentOS Linux release 7.9.2009 (Core)2.2 piwigo piwigo-13.6.0.zip三 安装 3.1安装资源下载 piwigo 请到官网下载https://piwigo.org 安装步骤也…

【STL九】关联容器——map容器、multimap容器

【STL九】关联容器——map容器、multimap容器一、map简介二、头文件三、模板类四、map的内部结构五、成员函数1、迭代器2、元素访问3、容量4、修改操作~~5、操作~~5、查找6、查看操作六、demo1、查找find2、查找lower_bound、upper_bound3、insert、emplace() 和 emplace_hint(…

超详细!Apache+Tomcat+mod_jk搭建负载均衡集群

目录 0.流程图&#xff1a; 1.集群环境&#xff1a; 2.Apache服务器安装httpd&#xff1a; 3.tomcat1服务器和tomcat2服务器安装jdk和Tomcat 4.tomcat1服务器和tomcat2服务器创建页面&#xff1a; 5.Apache服务器的mod_jk模块的安装&#xff1a; 6.查看是否mod_jk.so模块…

DMDSC问题测试

问题一&#xff1a;手动停止两节点&#xff0c;单独启动节点二测试 集群停库前状态&#xff0c;登录监视器查看 dmcssm INI_PATHdmcssm.ini show 节点一&#xff1a; [dmdbalocalhost ~]$ DmServiceDMSERVER stop Stopping DmServiceDMSERVER: …

Go语言开发小技巧易错点100例(六)

往期回顾&#xff1a; Go语言开发小技巧&易错点100例&#xff08;一&#xff09;Go语言开发小技巧&易错点100例&#xff08;二&#xff09;Go语言开发小技巧&易错点100例&#xff08;三&#xff09;Go语言开发小技巧&易错点100例&#xff08;四&#xff09;Go…

微信小程序开发-云开发降低资源调用次数

问题 微信小程序云开发是很方便&#xff0c;减少了后端的大量工作&#xff0c;但是&#xff01; 流量主的一点广告费&#xff0c;一不小心就全被腾讯薅走了&#xff01;当然一种办法就是使用云服务器自建后端&#xff0c;也要付费&#xff0c;没有对比过&#xff0c;不知道各…

如何在移动应用中集成美颜SDK实现人脸识别和美化功能?

随着移动应用的普及和人们对美的追求&#xff0c;美颜功能已成为很多应用的必备功能。而为了实现这样的功能&#xff0c;开发者需要使用美颜SDK。本文将从以下几个方面介绍如何在移动应用中集成美颜SDK实现人脸识别和美化功能。 一、美颜SDK的介绍 美颜SDK是一种用于美化人脸的…

应用程序接口(API)安全的入门指南

本文简单回顾了 API 的发展历史&#xff0c;其基本概念、功能、相关协议、以及使用场景&#xff0c;重点讨论了与之相关的不同安全要素、威胁、认证方法、以及十二项优秀实践。 根据有记录的历史&#xff0c;随着 Salesforce 的销售自动化解决方案的推出&#xff0c;首个 We…

缩短客户响应时间的 5 种方法

在当今竞争激烈的世界中&#xff0c;客户服务就是确保卓越的客户体验。这意味着顶级品牌必须竞争为客户提供最好的客户服务&#xff0c;而且提供最快的响应时间。 改善客户服务响应时间的 5种方法 1.使用正确的客户服务软件 客户服务软件是您可以为提高客户服务而进行的最佳投资…