流是否使用流源的CHARACTERISTICS?

ama*_*ish 4 java java-8 java-stream

从这个问题

报告,IMMUTABLE或CONCURRENT的分裂器保证永远不会抛出ConcurrentModificationException.当然,CONCURRENT在语义上排除了SIZED,但这对客户端代码没有任何影响.

实际上,这些特性并不用于Stream API中的任何内容,因此,使用它们不一致的地方永远不会被注意到.

这也解释了为什么每个中间操作都具有清除CONCURRENT,IMMUTABLE和NONNULL特性的效果:Stream实现不使用它们,并且表示流状态的内部类不维护它们.

如果流不使用来自源的CHARACTERISTICS,那么流如何并行工作?流是否完全忽略了流源特征?

从这个问题 收集者不知道即时通讯使用供应商提供的并发收集,因此特征不受收集器容器类型的影响

  1. 在什么情况下流API考虑特征?
  2. 哪个操作重置哪个特性?

Eug*_*ene 6

您要求的可能的.这些答案中的正确措辞是,忽略这些属性时,在某些将来它们可能被流实现注入/读取/使用.

同样在你的评论中,你说:

someTreeSet().stream()
         .sorted()
         .... some other operations 
Run Code Online (Sandbox Code Playgroud)

会打电话sorted.在这种情况下,这根本不是真的,不会调用该操作.这是一个未被忽略的流标志,并被注入到流实现中TreeSet.