繁体   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