[英]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.