news 2026/7/7 9:14:18

lambad和stream流企业固定搭配

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
lambad和stream流企业固定搭配

1. 遍历/批量处理:forEach

业务场景:查出了一堆用户,需要批量往里面塞个默认状态,或者批量打印日志。固定搭配集合.forEach(对象 -> 操作逻辑)

// 传统写法:for循环
for (User user : userList) {
System.out.println(user.getName());
}
// 企业流写法:直接点 forEach
userList.forEach(user -> System.out.println(user.getName()));
// 极简缩写(结合 ::)
userList.forEach(System.out::println);

2. 过滤/筛选:filter

业务场景:从所有用户中,只挑出年龄大于 18 岁的人。固定搭配集合.stream().filter(对象 -> 条件判断).collect(Collectors.toList())

List<User> adults = userList.stream()
.filter(user -> user.getAge() > 18) // 条件为 true 的保留,false 的丢弃
.collect(Collectors.toList()); // 【固定结尾】把流重新打包成 List

3. 提取某一列/对象转换:map⭐️(用得最多)

业务场景 A(提取单列):我不需要整个 User 对象,我只要所有人的名字列表。业务场景 B(实体类转 Resp):把 User 对象转换成 UserResp 返回给前端。固定搭配集合.stream().map(对象 -> 转换逻辑).collect(Collectors.toList())

// 场景A:只要名字
List<String> names = userList.stream()
.map(user -> user.getName()) // 把 User 变成了 String
.collect(Collectors.toList());
// 场景A极简缩写(结合 ::)
List<String> names = userList.stream()
.map(User::getName)
.collect(Collectors.toList());
// 场景B:实体转Resp(结合你之前问的)
List<UserResp> respList = userList.stream()
.map(user -> {
UserResp resp = new UserResp();
resp.setName(user.getName());
return resp;
})
.collect(Collectors.toList());

4. 排序:sorted

业务场景:按用户的年龄从小到大(升序)排,或者按创建时间从晚到早(降序)排。固定搭配集合.stream().sorted(Comparator.comparing(对象::get字段)).collect(...)

// 升序(从小到大)
List<User> sortedList = userList.stream()
.sorted(Comparator.comparing(User::getAge))
.collect(Collectors.toList());
// 降序(从大到小,在后面加个 .reversed())
List<User> sortedListDesc = userList.stream()
.sorted(Comparator.comparing(User::getAge).reversed())
.collect(Collectors.toList());

5. 判断是否包含/匹配:anyMatch

业务场景:检查这批用户里,有没有名字叫“张三”的。不需要查出具体数据,只要一个 true/false。固定搭配集合.stream().anyMatch(对象 -> 条件)

boolean hasZhangSan = userList.stream()
.anyMatch(user -> "张三".equals(user.getName()));
// 只要找到一个匹配的,立刻返回 true,后面不再执行了(短路)

6. 分组:groupingBy⭐️(极其常用)

业务场景:把用户按照部门ID(或者性别、状态)分组,变成一个Map。以前要写一大堆 for 循环 if 判断,现在一行搞定。固定搭配集合.stream().collect(Collectors.groupingBy(对象::get分组依据))

// 按照性别分组
// 结果:Map<Integer, List<User>> (Key是性别1/2,Value是对应的用户列表)
Map<Integer, List<User>> genderMap = userList.stream()
.collect(Collectors.groupingBy(User::getGender));

7. List 转 Map:toMap⭐️(新人最容易踩坑的地方)

业务场景:把 List 转成 Map,方便后面用 ID 快速查找对象,不用每次都 for 循环。固定搭配集合.stream().collect(Collectors.toMap(对象::getKey, 对象 -> 对象本身))

// 把 List<User> 转成 Map<用户ID, User对象>
Map<Long, User> userMap = userList.stream()
// 【固定写法】第一个参数是Key(User::getId),第二个参数是Value(u -> u 表示对象本身)
.collect(Collectors.toMap(User::getId, user -> user));
// ⚠️企业防坑写法:如果你的List里有两个相同的ID,上面的代码会报错!
// 所以企业里通常会加上第三个参数,表示遇到相同Key时保留哪一个:
Map<Long, User> safeUserMap = userList.stream()
.collect(Collectors.toMap(User::getId, user -> user, (oldKey, newKey) -> oldKey));

  1. 开头:但凡想用流,先无脑敲.stream()
  2. 车间filter筛选、map改造、sorted排队
  3. 结尾:要变回 List 就.collect(Collectors.toList()),要变 Map 就.collect(Collectors.toMap(...)),只要判断就.anyMatch(...)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 9:13:32

三步搞定智慧教育平台电子课本下载:这款免费工具让备课效率翻倍

三步搞定智慧教育平台电子课本下载&#xff1a;这款免费工具让备课效率翻倍 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具&#xff0c;帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载&#xff0c;让您更方便地获取课本内容。 …

作者头像 李华
网站建设 2026/7/7 9:13:05

遗传算法 Python 3.11 实战:5步实现函数优化,对比梯度下降收敛速度

遗传算法Python 3.11实战&#xff1a;5步实现函数优化与梯度下降对比当我们需要在复杂搜索空间中找到最优解时&#xff0c;传统优化方法往往力不从心。遗传算法作为一种模拟自然进化过程的智能优化技术&#xff0c;正成为解决这类问题的利器。本文将带您用Python 3.11从零实现遗…

作者头像 李华
网站建设 2026/7/7 9:11:55

Edge/Chrome STATUS_INVALID_IMAGE_HASH 错误:3种根因分析与4步根治方案

Edge/Chrome STATUS_INVALID_IMAGE_HASH 错误&#xff1a;3种根因分析与4步根治方案当你在Windows 10/11系统中突然遭遇Edge或Chrome浏览器崩溃&#xff0c;屏幕上赫然显示"STATUS_INVALID_IMAGE_HASH"错误代码时&#xff0c;这通常意味着浏览器内核的安全机制正在阻…

作者头像 李华
网站建设 2026/7/7 9:10:04

软文引流转化偏低?分享豆顶顶主流AI获客组合运营思路

上周一个做装修的老吴请我吃饭&#xff0c;说他今年最大的困惑是&#xff1a;公司在头条、小红书、本地论坛上软文没少发&#xff0c;曝光量加起来快百万了&#xff0c;结果真正打电话来咨询的客户&#xff0c;十个手指头数得过来。 我问他&#xff1a;“你自己用过豆包、DeepS…

作者头像 李华