考虑以下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
的结果。
这里,2号给我的延迟比1号低很多。有谁知道为什么或有什么问题吗?
myList.stream().mapToInt(this::getInt).max()
试试 映射到一个 IntStream
. 安 IntStream
与 int
的内部,避免了装箱和拆箱的开销。Integer
对象。另外: IntStream.max()
不需要自定义比较器。
所以你建议突出的原因是'装箱'和'拆箱'?
在没有通过你的基准运行之前,我不知道它是否能与 for
循环的性能。但这将是一个改进。如果还不够好,那么我建议继续使用循环,因为我看不到任何其他的方法来改善它。
你可能应该利用Streams的特性,它应该可以优化这些情况。阅读Streams的文档,第一个例子显示了IntStream的优化路径。
https:/docs.oracle.comjavase8docsapijavautilstreamStream.html。
int max = myList.stream()
.mapToInt(this::getInt)
.max()
.orElse(Integer.MIN_VALUE);