首页 > 解决方案 > Java Streams .max() 和 .min() 性能落后?

问题描述

考虑以下 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 给我的延迟要低得多。有谁知道我为什么或有什么问题?

标签: javajava-8java-streammaxmin

解决方案


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

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

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

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


推荐阅读