如何在 Java 中的 parallelStream 中收集 Pair?

问题描述

这里大概是我想修改代码

        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());
        }
    );