Java中map方法通过Function将流元素从T映射为R,返回新Stream;支持字符串转整数、属性提取、大小写转换、自定义前缀等,需手动处理异常,常与filter、collect等链式配合。

Java 中使用 map 方法对流中元素进行类型转换,核心是传入一个 Function 函数式接口实例,将每个元素从类型 T 映射为新类型 R,返回一个新的 Stream。
基本语法与常见转换场景
map 是 Stream 的中间操作,不改变原数据,只生成新流。常用转换包括:
- 字符串转整数:
stream.map(Integer::parseInt) - 对象提取属性(如从
User取name):stream.map(User::getName) - 大小写转换:
stream.map(String::toUpperCase) - 自定义转换(如添加前缀):
stream.map(s -> "ID_" + s)
处理可能的异常(如解析失败)
map 本身不处理运行时异常,若转换逻辑可能抛出异常(如 Integer::parseInt 遇到非数字字符串),需主动捕获或改用安全方式:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 用
try-catch包裹在 lambda 中,返回默认值或空:s -> { try { return Integer.parseInt(s); } catch (NumberFormatException e) { return 0; } } - 先用
filter排除非数字字符串:stream.filter(s -> s != null && s.matches("\d+")).map(Integer::parseInt)
链式调用与其他操作配合
map 常与 filter、collect 等组合使用,实现完整数据处理流程:
- 过滤再转换:
list.stream().filter(Objects::nonNull).map(String::trim).map(String::length).collect(Collectors.toList()) - 转换后去重或排序:
stream.map(User::getDepartment).distinct().sorted().collect(Collectors.toList()) - 嵌套对象扁平化(配合
flatMap):stream.map(User::getAddresses).flatMap(List::stream)
注意返回类型与泛型推断
map 返回的是 Stream,编译器通常能自动推断泛型,但复杂场景下建议显式声明或检查目标类型:
- 避免误用:不要在
map后直接调用forEach修改原集合,它只是遍历新流 - 确保后续操作兼容新类型,例如
map成Integer后,不能再用String方法 - 若需转回集合,记得调用
collect,如collect(Collectors.toList())
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










