概述
Consider writing Groovy code to retrieve the transformed version of an element from a given collection such that transformed version of the element satisfies a given predicate.
这是仅使用Groovy的代码段,仅使用Groovy的功能。
(0..N).collect { e -> transform(e) }
.findResult([]) { e -> predicate(e) ? e : null }
这是一个使用Java 8流的Groovy + Java代码段。
IntStream.range(0, N)
.mapToObj { e -> transform(e) }
.filter { e -> predicate(e) }
.findAny()
.orElse([])
当第一个代码段转换时(收藏) every element in the source 收藏ion before executing findResult (staged execution), the second snippet executes the entire pipeline of functions for every element in the source 收藏ion. Consequently, the Groovy+Java snippet is more efficient as it stops transforming the elements as soon as the transformed version of an element is found.
In terms of parallelism, here’s the Groovy-only snippet parallelized using GPars.
GParsPool.withPool {
(0..N).collectParallel { e -> transform(e) }
.findResult([]) { e -> predicate(e) ? e : null }
}
而收藏被并行化收藏Parallel),由于GPar不支持findResult不并行化。 此外,即使findResult被并行化,它将仅在之后执行收藏Parallel完成,因此,由于分阶段执行而导致的上述观察到的效率低下将仍然存在。
相比之下,这是Groovy + Java片段的并行版本。
IntStream.range(0, N)
.parallel().
.mapToObj { e -> transform(e) }
.filter { e -> predicate(e) }
.findAny()
.orElse([])
与仅使用Groovy的并行代码段不同,流水线中的每个函数在其输入可用时都并行执行。 因此,这将比并行的仅Groovy的代码段更有效。
几年前,Groovy使Java成为groovier。 借助Java 8流,我认为Java可以使Groovy变得更时髦。
也就是说,我很渴望看到Groovy将如何发展成为Java groovier。
from: https://dev.to//rvprasad/groovier-groovy-with-java-8-streams-9l7
最后
以上就是花痴摩托为你收集整理的具有Java 8流的Groovier Groovy的全部内容,希望文章能够帮你解决具有Java 8流的Groovier Groovy所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复