filter筛选元素、map一对一转换、flatmap一对多展开并扁平化:filter用predicate保留true元素,map用function转类型,flatmap用function>拆包合并,三者链式使用可清晰处理数据流。

Java Stream API 的中间操作中,filter、map 和 flatMap 是最常用也最易混淆的三类,它们各自承担不同职责:filter 负责筛选,map 负责一对一转换,flatMap 负责“拆包+合并”式的一对多映射。
filter:按条件留下符合条件的元素
它接收一个 Predicate<t></t>(谓词),对每个元素做布尔判断,只保留返回 true 的元素。操作后流的元素类型不变,数量可能减少。
- 适合场景:剔除空值、筛选特定范围数字、匹配字符串前缀等
- 常见写法:
stream.filter(x -> x != null)、stream.filter(s -> s.startsWith("A")) - 注意:不会改变元素本身,只是“过筛子”,不产生新类型
map:把每个元素变成另一个东西
它接收一个 Function<t r></t>,对流中每个元素执行转换,生成一个新类型(或同类型)的新元素。输入一个,输出一个,一一对应。
- 适合场景:提取对象字段(如
user -> user.getId())、字符串转大写、数值翻倍等 - 常见写法:
stream.map(String::toUpperCase)、stream.map(User::getEmail) - 注意:返回流的泛型变为
R,若 R 与 T 不同,流类型就变了
flatMap:把一个元素展开成多个,再压平成单一流
它接收一个 Function<t stream>></t>,先将每个元素映射为一个 Stream<r></r>,再把这些子流“打散合并”成一个扁平的 Stream<r></r>。
- 适合场景:处理嵌套集合(如
List<list>></list>→List<string></string>)、字符串切分后展开、Optional 解包 - 常见写法:
stream.flatMap(s -> Arrays.stream(s.split(",")))、listOfUsers.stream().flatMap(u -> u.getPhones().stream()) - 注意:map 返回的是
Stream<stream>></stream>,flatMap 直接返回Stream<r></r>,避免嵌套结构
这三者常链式组合使用,比如先 filter 筛数据,再 map 提取关键字段,最后 flatMap 展开关联列表——逻辑清晰,代码紧凑,且天然支持并行处理。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











