Java8中findAny和findFirst的區別


Optional<T> findFirst()

返回列表中的第一個元素。

這里的short-circuiting是指:有時候需要在遍歷中途停止操作,比如查找第一個滿足條件的元素或者limit操作。在Stream中short-circuiting操作有:anyMatch、allMatch、noneMatch、findFirst、findAny、limit,這些操作在Sink中都有一個變量來判斷是否短路,比如limit用的是m,match用的是stop,find用的是hasValue。

這里的terminal operation是指:一個終結操作,比如foreach,IntStream.sum

 

 

Optional<T> findAny()

 

可以看到findAny()操作,返回的元素是不確定的,對於同一個列表多次調用findAny()有可能會返回不同的值。使用findAny()是為了更高效的性能。如果是數據較少,串行地情況下,一般會返回第一個結果,如果是並行的情況,那就不能確保是第一個。比如下面的例子會隨機地返回OptionalInt[50]。

System.out.println(IntStream.range(0, 100).parallel().findAny());

 

轉自:https://blog.csdn.net/huanghanqian/article/details/102807972


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM