gga*_*zor 3 java functional-programming java-8 java-stream
据我所知,Java8中的Streams只能收集一次(如在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>
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我能想到达到你想要的最接近的东西是偷看:
Stream Peek(消费者行动)
返回由此流的元素组成的流,此外还在从结果流中消耗元素时对每个元素执行提供的操作.
这是一个中间操作.
它允许您在Stream消耗时对Stream的元素执行操作.
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>
}
Run Code Online (Sandbox Code Playgroud)