如何在Java8流中管理附带影响

格玛玛佐

我知道Java8中的流只能被收集一次(例如在forEach()终止中),但是我想知道我们是否能够设法在一系列过滤和映射任务的中间“进入”流以产生一些附带影响。

从本质上讲,“点击”就像forEach()在管道的那个点做一个但返回Stream。

我会这样使用它:

List<User> createAndPersistRandomUsers(int count) {
  return IntStream.range(0, count)
    .boxed() // returns Stream<Integer>
    .map(UserBuilder::random) // returns Stream<User>
    .tap(userRepo::persist) // Collateral persist of user, returns Stream<User>
    .collect(toList()); // returns List<User>
}

有任何想法吗?

他们是

我能想到的实现你想要的最接近的事是偷看

流窥视(消费者行为)

返回由该流的元素组成的流,并在从结果流中消耗元素时对每个元素另外执行提供的操作。

这是一个中间操作。

它允许您在消耗流的同时对流的元素执行操作。

List<User> createAndPersistRandomUsers(int count) {
  return IntStream.range(0, count)
    .boxed() // returns Stream<Integer>
    .map(UserBuilder::random) // returns Stream<User>
    .peek(userRepo::persist) // Collateral persist of user, returns Stream<User>
    .collect(toList()); // returns List<User>
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章