问题描述
final List<Objects> list = evaluators.parallelStream()
.map(evaluator -> evaluator.evaluate())
.flatMap(List::stream)
.collect(Collectors.toList());
我想更改 evaluator.evaluate() 方法以返回 Pair。类似的东西:
final Pair<List<Object>,List<String>> pair = evaluators.parallelStream()
.map(evaluator -> evaluate())
...?
这样,如果 evaluatorA 返回 Pair 并且 evaluatorB 返回 Pair 那么最终结果是 Pair.
感谢您的帮助。
解决方法
我最终为列表对实现了一个客户收集器:
...
.collect(
// supplier
() -> Pair.of(new ArrayList<>(),new ArrayList<>()),// accumulator
(accumulatedResult,evaluatorResult) -> {
accumulatedResult.getLeft().addAll(evaluatorResult.getLeft());
accumulatedResult.getRight().addAll(evaluatorResult.getRight());
},// combiner
(a,b) -> {
a.getLeft().addAll(b.getLeft());
a.getRight().addAll(b.getRight());
}
);