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

如何筛选包含指定配料列表中任意配料的Pizza对象流?

过滤包含任意指定配料的Pizza Stream

核心实现方案

要筛选出包含目标配料列表中任意一种配料的Pizza流,你可以在filter中结合Stream.anyMatch()方法实现:

// 假设目标配料列表为 List<String> targetToppings
Stream<Pizza> pizzasWithAnyTargetTopping = pizzas.filter(pizza -> 
    targetToppings.stream().anyMatch(topping -> pizza.toppings().contains(topping))
);

代码逻辑解释

  • 外层filter负责逐个校验每个Pizza对象;
  • 内层通过targetToppings.stream()将目标配料列表转为流,调用anyMatch()判断:只要目标配料列表中有任意一个配料存在于当前Pizza的配料列表中,anyMatch()就返回true,该Pizza会被保留到结果流中。

性能优化建议

如果目标配料列表元素较多,建议先将其转为HashSet——Set的contains()方法时间复杂度为O(1),远优于List的O(n),能大幅提升匹配效率:

Set<String> targetToppingSet = new HashSet<>(targetToppings);
Stream<Pizza> pizzasWithAnyTargetTopping = pizzas.filter(pizza -> 
    pizza.toppings().stream().anyMatch(targetToppingSet::contains)
);

这里我们反过来遍历当前Pizza的配料,检查是否有任意一个配料存在于目标Set中,逻辑和之前完全等价,但性能更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:00:59