簡體   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