You need to enable JavaScript to run this app. Java 8如何使用并行流按条件过滤ProductDto列表匹配Product对象
优惠活动
大模型
产品
解决方案
定价
更多

Java 8如何使用并行流按条件过滤ProductDto列表匹配Product对象

实现方案

核心逻辑可以直接合并到同一个filter规则中,不需要拆分多个过滤步骤:先匹配name、type字段,code的匹配规则简化为「只要任意一方code为null就跳过code校验,仅当双方code都不为空时要求相等」即可完全对齐原for循环的逻辑。

完整实现代码如下:

import java.util.Objects;
import java.util.Optional;

ProductDto find(List<ProductDto> productDtos, Product product) {
    return productDtos.parallelStream()
            .filter(dto -> 
                    // 匹配name、type,用Objects.equals避免空指针异常
                    Objects.equals(dto.getName(), product.getName())
                    && Objects.equals(dto.getType(), product.getType())
                    // code匹配规则:任意一方为null则跳过匹配,都不为空时要求相等
                    && (dto.getCode() == null || product.getCode() == null || Objects.equals(dto.getCode(), product.getCode()))
            )
            // 并行场景下优先用findAny获取任意匹配项性能更高,如需严格保留原for循环的顺序匹配规则可替换为findFirst()
            .findAny()
            // 无匹配项时返回null,和原逻辑完全对齐
            .orElse(null);
}

注意事项

  • 如果你确定业务场景中name、type、code字段一定不会为null,可以把Objects.equals替换为直接调用equals方法。
  • 如果你需要返回所有匹配的对象列表,把最后的findAny().orElse(null)替换为.collect(Collectors.toList())即可。
  • 并行流适合数据量较大的场景,如果列表长度很小,并行流的线程调度开销反而会高于普通for循环,可按需选择。

内容的提问来源于stack exchange,提问作者user15923931

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 15:54:03