我知道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] 删除。
我来说两句