gpt4 book ai didi

Java 8 Streams : multiple filters vs. 复杂条件

转载 作者:太空宇宙 更新时间:2023-11-04 13:44:24 24 4
gpt4 key购买 nike

有时您想过滤具有多个条件的Stream:

myList.stream().filter(x -> x.size() > 10).filter(x -> x.isCool()) ...

或者您可以对复杂条件和单个 过滤器执行相同的操作:

myList.stream().filter(x -> x.size() > 10 && x -> x.isCool()) ...

我的猜测是第二种方法具有更好的性能特征,但我不知道。

第一种方法在可读性方面胜出,但哪种方法对性能更好?

最佳答案

两种替代方案必须执行的代码非常相似,以至于您无法可靠地预测结果。底层对象结构可能有所不同,但这对热点优化器来说不是挑战。因此,如果有任何差异,这取决于其他周围条件,这将产生更快的执行速度。

组合两个过滤器实例会创建更多对象,从而创建更多委托(delegate)代码,但如果您使用方法引用而不是 lambda 表达式,情况可能会发生变化,例如将 filter(x -> x.isCool()) 替换为 filter(ItemType::isCool)。这样,您就消除了为 lambda 表达式创建的合成委托(delegate)方法。因此,使用两个方法引用组合两个过滤器可能会创建与使用带有 && 的 lambda 表达式的单个 filter 调用相同或更少的委托(delegate)代码。

但是,如上所述,这种开销将被 HotSpot 优化器消除,并且可以忽略不计。

理论上,两个过滤器比单个过滤器更容易并行化,但这仅与计算密集型任务相关。

所以没有简单的答案。

底线是,不要考虑低于气味检测阈值的性能差异。使用更具可读性的内容。

<小时/>

……并且需要一个对后续阶段进行并行处理的实现,这是标准 Stream 实现目前未采用的方法

关于Java 8 Streams : multiple filters vs. 复杂条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31010106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com