核心是将每个子List转为Stream再合并:nested.stream().flatMap(List::stream).collect(Collectors.toList());需防null时加.filter(Objects::nonNull),区别于map在于flatMap自动扁平化而非生成嵌套流。

用 flatMap 把二维 List 转成一维 >
List,核心是把每个子列表“展开”为流,再合并所有流。
理解 flatMap 的作用
flatMap 接收一个函数,该函数对每个元素返回一个 Stream,然后自动把所有子流“扁平化”合并成一个流。这正好对应“把每个内层 List 变成 Stream,再合起来”的需求。
基本写法(推荐)
假设你有一个 List:>
// 示例数据
List<list>> nested = Arrays.asList(
Arrays.asList("a", "b"),
Arrays.asList("c"),
Arrays.asList("d", "e", "f")
);</list>
// 压平成一维 List
List<string> flat = nested.stream()
.flatMap(list -> list.stream()) // 每个 List → Stream<string>
.collect(Collectors.toList());</string></string>
结果:
["a", "b", "c", "d", "e", "f"] <h3>常见变体写法</h3>
- 用方法引用更简洁:
.flatMap(List::stream) - 如果元素是数组(如
List),改用Arrays::stream - 处理可能为
null的子列表时,加空值检查:.filter(Objects::nonNull).flatMap(...) - 需要去重或排序,可在
flatMap后链式调用:.distinct()或.sorted()
为什么不用 map + collect?
map 会把每个 List 变成一个 Stream,结果是 Stream,没法直接收集;而 flatMap 内部做了合并,一步到位。这是它和 map 的本质区别。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











