lambda表达式配合stream的map()方法可简洁实现集合映射,支持链式组合、方法引用、类型推断与泛型配合,使转换逻辑清晰、安全、高效。

用 Lambda 表达式做集合映射,核心就是把“对每个元素做转换”这件事写成一行简洁、意图明确的代码,不再需要手写 for 循环或匿名内部类。
map() 方法配合 Lambda 是最直接的方式
Stream 的 map() 接收一个 Function 类型的函数式接口,Lambda 正好用来实现它——输入一个元素,返回转换后的新值。
- 原始列表是字符串,想转成长度:
list.stream().map(s -> s.length()).collect(Collectors.toList()) - 原始是 User 对象,想提取姓名:
users.stream().map(User::getName).collect(Collectors.toList()) - 想统一转大写再加前缀:
names.stream().map(name -> "USER_" + name.toUpperCase()).collect(Collectors.toList())
链式组合让多步映射更清晰
映射常不是孤立操作,往往和过滤、排序等连用。Lambda 让每一步都保持语义透明:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 筛选年龄大于 25 的用户 → 提取名字 → 转大写 → 收集:
users.stream().filter(u -> u.getAge() > 25).map(User::getName).map(String::toUpperCase).collect(Collectors.toList()) - 多个 map 可以合并(比如先转对象再取字段):
orders.stream().map(Order::getCustomer).map(Customer::getAddress).collect(Collectors.toList())
方法引用能进一步减少冗余
当转换逻辑就是调用某个已有方法时,用 :: 替代 Lambda 更简短、更安全:
-
strings.stream().map(String::trim)比s -> s.trim()少打字,也避免空指针误写 -
numbers.stream().map(Math::abs)或paths.stream().map(Path::toFile)都是典型场景 - 注意:方法引用必须和函数式接口的签名匹配(参数数量、类型、返回值)
别忽略类型推断和泛型配合
map 返回的是 Stream
- 如果 map 后接
.mapToInt(...),就转成 IntStream,适合求和、统计等原生数值操作 - 若映射结果含 null,
map不会自动跳过,必要时先 filter 或用 Optional 处理 - 泛型擦除不影响 map 内部逻辑,但 collect 时建议用
Collectors.toList()而非 raw list
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










