lrn*_*grm 4 java-8 java-stream
我控制的消费者得到了这个forEach所以它可能会或可能不会被要求执行一个动作.
list.parallelStream().forEach( x-> {} );
Run Code Online (Sandbox Code Playgroud)
Streams是懒惰Streams不会迭代,对吧?什么都不会发生是我所期待的.请告诉我,如果我错了.
它将遍历整个流,将任务提交到fork-join池,将列表拆分为部分并将所有列表元素传递给此空lambda.目前,无法在运行时检查lambda表达式是否为空,因此无法对其进行优化.
使用中出现类似问题Collector
.所有收藏家都有这个finisher
操作,但在很多情况下它都是一个身份功能x -> x
.在这种情况下,有时使用收集器的代码可以大大优化,但是您无法稳健地检测所提供的lambda是否为identity.为了解决这个问题IDENTITY_FINISH
,引入了额外的收集器特性.如果能够鲁棒地检测所提供的λ是否是同一性函数,则该特性是不必要的.
另请参阅JDK-8067971讨论.这建议创建静态常量,如Predicate.TRUE
(总是为真)或Predicate.FALSE
(总是为假)来优化像这样的操作Stream.filter
.例如,如果Predicate.TRUE
被提供,然后过滤步骤可以删除,并且如果Predicate.FALSE
被提供,则流可以被用在这一点空流代替.再次有可能在运行时检测到提供的谓词总是为真,那么就没有必要创建这样的常量.
归档时间: |
|
查看次数: |
905 次 |
最近记录: |