繁体   English   中英

Java Streams.max() 和.min() 性能滞后?

[英]Java Streams .max() and .min() lag in performance?

考虑以下 2 个示例。

1 带流

myList.stream().map(this::getInt).max(Integer::compareTo);

2 旧方式

int max = Integer.MIN_VALUE;
for (MyItem item : myList) {
    max = Math.max(max, getInt(item));    
}

上面的getInt方法接受一个MyItem参数并返回一个int结果。

在这里,与#1 相比,#2 给我的延迟要低得多。 有谁知道我为什么或有什么问题?

myList.stream().mapToInt(this::getInt).max()

尝试映射到IntStream IntStream在内部与int一起工作,这避免了装箱和拆箱Integer对象的开销。 此外, IntStream.max()不需要自定义比较器。

所以你认为突出的原因是“装箱”和“拆箱”?

如果不通过您的基准运行它,我不知道它是否会匹配for循环的性能。 但这将是一个进步。 如果它不够好,那么我建议坚持使用循环,因为我看不到任何其他改进它的方法。

您可能应该利用 Streams 的特性来优化这些情况。 阅读 Streams 的文档,第一个示例显示了 IntStream 的优化路径。

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html

     int max = myList.stream()
                      .mapToInt(this::getInt)
                      .max()
                      .orElse(Integer.MIN_VALUE);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM