Java里面的10个Lambda表达式必须掌握,提高生产力

目录

Java里面的10个Lambda表达式必须掌握,提高生产力

前言

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

2. 使用Lambda表达式进行集合过滤

3. 使用Lambda表达式进行集合映射

4. 使用Lambda表达式进行集合排序

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

6. 使用Lambda表达式进行多重条件筛选

7. 使用Lambda表达式进行集合扁平化

8. 使用Lambda表达式进行条件最大值或最小值查找

9. 使用Lambda表达式进行集合元素计数

10. 使用Lambda表达式进行异常处理

结语


Java里面的10个Lambda表达式必须掌握,提高生产力

前言

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

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

未使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
for (String fruit : list) {System.out.println(fruit);
}

传统的for循环遍历集合,虽然直观,但略显冗长。 

使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
list.forEach(fruit -> System.out.println(fruit));

利用forEach和Lambda表达式,我们可以将遍历和操作合并为一行代码,简洁而高效。

2. 使用Lambda表达式进行集合过滤

未使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
List<String> filtered = new ArrayList<>();
for (String name : list) {if (name.startsWith("司")) {filtered.add(name);}
}

使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
List<String> filtered = list.stream().filter(name -> name.startsWith("司")).collect(Collectors.toList());

 通过filter方法和Lambda表达式,我们可以轻松筛选出符合条件的元素。

3. 使用Lambda表达式进行集合映射

未使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
List<Integer> lengths = new ArrayList<>();
for (String name : list) {lengths.add(name.length());
}

使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
List<Integer> lengths = list.stream().map(name -> name.length()).collect(Collectors.toList());

利用map方法和方法引用,我们可以快速转换集合中的每个元素。 

4. 使用Lambda表达式进行集合排序

未使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
Collections.sort(list, new Comparator<String>() {@Overridepublic int compare(String s1, String s2) {return s1.compareTo(s2);}
});

使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
list.sort(Comparator.naturalOrder());

 Lambda表达式(s1, s2) -> s1.compareTo(s2)简化了排序逻辑的实现。

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

未使用Lambda表达式:

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

使用Lambda表达式:

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

Lambda表达式(a, b) -> a + b用于归约操作,计算总和。

6. 使用Lambda表达式进行多重条件筛选

未使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
List<String> filtered = new ArrayList<>();
for (String name : list) {if (name.startsWith("司") && name.length() > 2) {filtered.add(name);}
}

使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
List<String> filtered = list.stream().filter(name -> name.startsWith("司") && name.length() > 2).collect(Collectors.toList());

 Lambda表达式中可以包含多重条件,简化了筛选逻辑。

7. 使用Lambda表达式进行集合扁平化

未使用Lambda表达式:

List<List<String>> listOfLists = Arrays.asList(Arrays.asList("范闲", "五竹"),Arrays.asList("司理理", "林若若")
);
List<String> flatList = new ArrayList<>();
for (List<String> innerList : listOfLists) {flatList.addAll(innerList);
}

使用Lambda表达式:

List<List<String>> listOfLists = Arrays.asList(Arrays.asList("范闲", "五竹"),Arrays.asList("司理理", "林若若")
);
List<String> flatList = listOfLists.stream().flatMap(Collection::stream).collect(Collectors.toList());

Lambda表达式Collection::stream用于将嵌套列表扁平化为单一列表。

8. 使用Lambda表达式进行条件最大值或最小值查找

未使用Lambda表达式:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int max = numbers.get(0);
for (int num : numbers) {if (num > max) {max = num;}
}

使用Lambda表达式:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
Optional<Integer> max = numbers.stream().reduce(Integer::max);

利用maxmin方法和Lambda表达式,我们可以轻松找到满足条件的最大或最小值。 

9. 使用Lambda表达式进行集合元素计数

未使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
int count = 0;
for (String name : list) {if (name.startsWith("理")) {count++;}
}

使用Lambda表达式:

List<String> list = Arrays.asList("范闲", "司理理", "林若若");
long count = list.stream().filter(name -> name.startsWith("理")).count();

通过filtercount方法,我们可以快速统计满足条件的元素数量。 

10. 使用Lambda表达式进行异常处理

未使用Lambda表达式:

List<String> list = Arrays.asList("1", "two", "3");
List<Integer> numbers = new ArrayList<>();
for (String item : list) {try {numbers.add(Integer.parseInt(item));} catch (NumberFormatException e) {numbers.add(0); // 或者其他的错误处理}
}

使用Lambda表达式:

List<String> list = Arrays.asList("1", "two", "3");
List<Integer> numbers = list.stream().map(item -> {try {return Integer.parseInt(item);} catch (NumberFormatException e) {return 0; // 或者其他的错误处理}}).collect(Collectors.toList());

结语

Lambda表达式是现代Java编程中不可或缺的一部分,通过本文的介绍,我们可以看到Lambda表达式如何使我们的代码更加简洁、易读和易于维护。它们不仅简化了代码,更是一种编程思维的转变,让我们能够以更函数式的方式思考问题。掌握Lambda表达式,将使你的代码更加高效、更富表现力。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用docker-compose搭建达梦数据库主备集群

目录 1. Docker集群的搭建 2. 检查主备数据库 3. 主备集群的JDBC连接设置 1. Docker集群的搭建 达梦的镜像文件都是tar文件&#xff0c;通过docker load命令导入&#xff1a; docker load -i dm8_20240422_x86_rh6_64_rq_ent_8.1.3.140.tar 成功导入后&#xff0c;可看到…

刚刚❗️德勤2025校招暑期实习测评笔试SHL测评题库已发(答案)

&#x1f4e3;德勤 2024暑期实习测评已发&#xff0c;正在申请的小伙伴看过来哦&#x1f440; ㊙️本次暑期实习优先考虑2025年本科及以上学历的毕业生&#xff0c;此次只有“审计及鉴定”“税务与商务咨询”两个部门开放了岗位~ ⚠️测评注意事项&#xff1a; &#x1f44…

【JAVASE】java语法(成员变量与局部变量的区别、赋值运算符中的易错点)

一&#xff1a;成员变量与局部变量的区别 区别 成员变量 局部变量 类中位置不同 …

Java:110-SpringMVC的底层原理(上篇)

SpringMVC的底层原理 在前面我们学习了SpringMVC的使用&#xff08;67章博客开始&#xff09;&#xff0c;现在开始说明他的原理&#xff08;实际上更多的细节只存在67章博客中&#xff0c;这篇博客只是讲一点深度&#xff0c;重复的东西尽量少说明点&#xff09; MVC 体系结…

2024 AEE | 风丘科技将亮相日本爱知国际会展中心——共同创造!

2024年名古屋汽车工程博览会&#xff08;Automotive Engineering Exposition 2024 NAGOYA&#xff09;将于7月17-19日在日本爱知县国际展示场&#xff08;Aichi Sky Expo&#xff09;开展。本展会是专门为活跃在汽车行业的工程师和研究人员举办的汽车技术展览&#xff0c;汇聚了…

Web自动化测试-掌握selenium工具用法,使用WebDriver测试Chrome/FireFox网页(Java

目录 一、在Eclipse中构建Maven项目 1.全局配置Maven 2.配置JDK路径 3.创建Maven项目 4.引入selenium-java依赖 二、Chrome自动化脚本编写 1.创建一个ChromeTest类 2.测试ChromeDriver 3.下载chromedriver驱动 4.在脚本中通过System.setProperty方法指定chromedriver的…

操作系统期末复习整理知识点

操作系统的概念&#xff1a;①控制和管理整个计算机系统的硬件和软件资源&#xff0c;并合理地组织调度计算机的工作和资源的分配&#xff1b;②提供给用户和其他软件方便的接口和环境&#xff1b;③是计算机中最基本的系统软件 功能和目标&#xff1a; ①操作系统作为系统资源…

搭贝请假审批应用

在现代企业管理中&#xff0c;高效的请假审批系统至关重要。搭贝的请假审批应用通过简化员工的请假流程、提升管理层的工作效率&#xff0c;确保企业运作的连贯性和透明度。本文将介绍搭贝请假审批应用的主要功能模块&#xff1a;请假分析看板、请假申请审批流、请假类型维护和…

RocketMq源码解析六:消息存储

一、消息存储核心类 rocketmq消息存储的功能主要在store这个模块下。 核心类就是DefaultMessageStore。我们看下其属性 // 配置文件 private final MessageStoreConfig messageStoreConfig; // CommitLog 文件存储实现类 private final CommitLog commitLog; …

Mybatis05-一对多和多对一处理

多对一和一对多 多对一 多对一的理解&#xff1a; 多个学生对应一个老师 如果对于学生这边&#xff0c;就是一个多对一的现象&#xff0c;即从学生这边关联一个老师&#xff01; 结果映射&#xff08;resultMap&#xff09;&#xff1a; association 一个复杂类型的关联&…

PHP实现抖音小程序用户登录获取openid

目录 第一步、抖音小程序前端使用tt.login获取code 第二步、前端拿到code传给后端 第三步、方法1 后端获取用户信息 第四步、方法2 抖音小程序拿到用户信息把用户信息传给后端 code2Session抖音小程序用户登录后端文档 第一步、抖音小程序前端使用tt.login获取code 前端 …

leetcode 所有可能的路径(图的遍历:深度优先和广度优先)

leetcode 链接&#xff1a; 所有可能的路径 1 图的基本概念 1.1 有向图和无向图 左边是有向图&#xff0c;右边是无向图。对于无向图来说&#xff0c;图中的边没有方向&#xff0c;两个节点之间只可能存在一条边&#xff0c;比如 0 和 1 之间的边&#xff0c;因为是无向图&am…

线性代数|机器学习-P12Ax=b条件下x最小值问题

文章目录 1. Axb下的最值问题-图形转换2. Gram-Schmidt 标准形3. 迭代法-Krylov子空间法 1. Axb下的最值问题-图形转换 假设我们有一个直线方程如下&#xff1a; 3 x 1 4 x 2 1 \begin{equation} 3x_14x_21 \end{equation} 3x1​4x2​1​​ 在二维平面上&#xff0c;各个范…

DDMA信号处理以及数据处理的流程---原始数据生成

Hello&#xff0c;大家好&#xff0c;我是Xiaojie&#xff0c;好久不见&#xff0c;欢迎大家能够和Xiaojie一起学习毫米波雷达知识&#xff0c;Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程&#xff0c;本系列文章将从目标生成、信号仿真、测距、测速、cfar…

LLVM 后端执行流程

异构计算程序工作流程 图4-1中的LLVM后端的主要功能是代码生成&#xff0c;其中包括若干指令生成分析转换pass&#xff0c;将LLVM IR 转换为特定目标架构的机器代码 LLVM 流水线结构 输入指令经过图4-2中的各个阶段&#xff0c;从最初的LLVM IR&#xff0c;逐步演化为Selectio…

管理数据必备;侦听器watch用法详解,vue2与vue3中watch的变化与差异

目录 一、侦听器&#xff08;watch&#xff09;是什么&#xff1f; 二、Vue2中的watch&#xff08;Options API&#xff09; 2.1、函数式写法 2.2、对象式写法 ①对象式基础写法 ②回调函数handler ③deep属性 ④immediate属性 三、Vue3中的watch 3.1、向下兼容&#xff…

两句话让LLM逻辑推理瞬间崩溃!!

一道简单的逻辑问题&#xff0c;竟让几乎所有的LLM全军覆没&#xff1f; 对于人类来说&#xff0c;这个名为「爱丽丝梦游仙境」&#xff08;AIW&#xff09;的测试并不算很难—— 「爱丽丝有N个兄弟&#xff0c;她还有M个姐妹。爱丽丝的兄弟有多少个姐妹&#xff1f;」 稍加思考…

LeetCode1143最长公共子序列

题目描述 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08…

redis windos修复版本

遇到的问题: Django的channel插件连接安装在windows上的redis报错: unknown command BZPOPMIN, channels-redis版本和redis不兼容导致.解决方案: 更新Redis版本. 微软官方维护的 Redishttps://github.com/microsoftarchive/redis/releases 2016年后就不更新了, 版本停留在了3.x…

学生信息管理(C语言)

学生信息管理 (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能: 系统以菜单方式工作学生信息录入功能(学生信息用文件保存)---输入学生信息浏览功能---输出查询、排序功能---算法1、…