[英]Java Streams .max() and .min() lag in performance?
考虑以下 2 个示例。
myList.stream().map(this::getInt).max(Integer::compareTo);
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.