簡體   English   中英

Java的ArrayList.stream()。anyMatch()是否保證按順序處理?

[英]Does Java's ArrayList.stream().anyMatch() guarantee in-order processing?

我有這個代碼:

ArrayList<Detector> detectors;
detectors.stream().anyMatch(d -> d.detectRead(impendingInstruction, fieldName));

但我還要保證:

  • 按順序處理列表,從第一個元素到最后一個元素;
  • 一旦元素返回true ,評估就會立即停止

這總是如此,或者如果不是,至少對於所有常見的JDK實現是否都是如此?

您的問題意味着關注流操作的副作用 ,否則您不會關心訂單或立即終止。 來自Javadoc

副作用

通常,不鼓勵行為參數對流操作的副作用,因為它們通常會導致無意中違反無國籍要求以及其他線程安全危險。

如果行為參數確實有副作用,除非明確說明,否則不能保證這些副作用對其他線程的可見性,也不保證對同一流管道中“相同”元素的不同操作在同一個線程中執行。 此外,這些效果的排序可能令人驚訝。 即使管道被約束產生的結果與流源的遭遇順序一致(例如,IntStream.range(0,5).parallel()。map(x - > x * 2).toArray( )必須產生[0,2,4,6,8]),不保證映射器函數應用於單個元素的順序,或者對給定元素執行任何行為參數的線程。

所以合同似乎是你可以僥幸逃脫,但它不能保證工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM