flatmap的核心是“映射成流+合并”,即对每个元素应用返回stream的函数,再将所有子流扁平合并为单个stream,惰性执行且禁止返回null。

flatMap 的核心不是“展开”本身,而是“映射成流 + 合并”。它不直接处理嵌套结构,而是让每个元素自己决定生成多少个新元素——通过返回一个 Stream。
flatMap 的执行逻辑很明确
它接收一个函数,这个函数对流中每个元素 T 执行一次,必须返回 Stream 多数时候你不是在“展开数据”,而是在“按关系提取并展平”: 三级结构(比如 Country → City → District)不能一步到位,必须链式调用: 只要能转成 Stream,就可参与 flatMap。比如 Map
常见展开场景与写法
> → Stream
:.flatMap(List::stream)
.flatMap(u -> u.getHobbies().stream())(注意判空).flatMap(s -> Arrays.stream(s.split(" ")))
ages.stream().flatMap(age -> students.stream().filter(s -> s.getAge() == age))
嵌套层级要逐级 flatMap
.flatMap(c -> c.getCities().stream())
.flatMap(city -> city.getDistricts().stream())
.flatMap(c -> Optional.ofNullable(c.getCities()).orElse(List.of()).stream())
Map 或其他容器也能 flatMap
map.entrySet().stream()
.flatMap(e -> e.getValue().stream().map(v -> new SimpleEntry(e.getKey(), v)))
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











