具有Java 8流的Groovier Groovy

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值