当前位置: 首页 > news >正文

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(...)
http://www.jsqmd.com/news/1140329/

相关文章:

  • OmenSuperHub:暗影精灵笔记本的终极性能解放工具
  • Python scikit-learn 1.5.0 实战:5步构建高精度分类模型并规避3大常见误区
  • 免费专业音频编辑神器:Audacity从零到精通的完整指南
  • spring boot 项目中oracle datasource设置schema
  • 【每天认识一个国家 | 澳大利亚】
  • LyricsX:重构macOS音乐体验的歌词引擎
  • 手机影像防抖演进:从OIS 1.0到AIS 3.0,3代技术如何重塑手持拍摄
  • 计算机毕业设计之jsp母婴用品购物网站
  • DriverStore Explorer v0.12.30:Windows驱动管理的革命性更新
  • REPENTOGON终极指南:15分钟掌握《以撒的结合》最强脚本扩展器
  • 如何用Elmer FEM快速完成多物理场仿真:从零开始的全流程指南 [特殊字符]
  • 计算机毕业设计之jsp奶粉仓库管理系统
  • 密码签名与加密方案安全性分析:从原理到实战选型与运维
  • Transformer注意力机制(Attention)核心干货笔记
  • 5个维度深度解析:如何用G-Helper重构你的华硕硬件控制体验
  • 2026对话式/零代码的AI小程序开发工具,一键搭建小程序平台汇总
  • 造形家:轻量化在线城市建筑三维AI建模工具测评
  • 标签不合规被扣货?凌风跨境工具箱一键批量打印合规标签
  • 百度网盘直链解析终极指南:三步获取高速下载链接,告别限速烦恼
  • 3步实现通达信缠论自动化分析:告别手工画图的智能解决方案
  • 碧蓝航线自动化脚本终极指南:24小时智能管家解放你的双手
  • 手机号码定位工具:3分钟实现号码归属地查询与地图可视化
  • 复旦微 FMQL45T900 与 Xilinx ZYNQ7045 对比:23 项关键指标与选型决策树
  • 5个步骤让你在电脑上免费畅玩Switch游戏:yuzu模拟器完整指南
  • Unsplash API 与 ChatGPT 集成:5个提升图文内容生产力的实战场景
  • 计算机毕业设计之jsp农村村务管理系统
  • 游戏MOD老是崩溃?REPENTOGON让你的《以撒的结合》稳定如新
  • 逆向工程实战:用IDA与OllyDbg深度剖析熊猫烧香病毒
  • AI绘画提示词工程:从文化符号理解到精准生成技术
  • LyricsX:Mac用户的终极歌词伴侣,免费打造完美音乐体验