You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Stream能否在单次过滤操作中同时获取符合与不符合条件的元素?

可以仅通过一次流式操作完成该拆分需求,不需要先调用filter方法,使用JDK内置的Collectors.partitioningBy()收集器即可实现。

partitioningBy接收一个断言(Predicate)作为分区条件,会自动将流中所有元素分为「满足条件」和「不满足条件」两组,返回结果为Map<Boolean, List<T>>类型,其中key=true对应的列表存储满足条件的元素,key=false对应的列表存储其余元素。

完整实现代码

首先修正示例列表的规范写法:

List<String> elements = List.of("e1", "el2", "el3", "4 el", "5 el");

核心流处理逻辑:

import java.util.stream.Collectors;
import java.util.List;
import java.util.Map;

Map<Boolean, List<String>> splitResult = elements.stream()
        .collect(Collectors.partitioningBy(s -> s.startsWith("el")));

结果获取

  • 以el开头的元素列表:splitResult.get(true),运行结果为 ["el2", "el3"]
  • 其余元素列表:splitResult.get(false),运行结果为 ["e1", "4 el", "5 el"]

该实现全程仅对列表做一次遍历,无需提前过滤丢弃元素,相比两次调用filter分别收集的实现方式,在数据量较大的场景下性能优势更明显。

内容的提问来源于stack exchange,提问作者Nabil El haouari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:27:03