0

这里大致是我要更改的代码:

        final List<Objects> list = evaluators.parallelStream()
                .map(evaluator -> evaluator.evaluate())
                .flatMap(List::stream)
                .collect(Collectors.toList());

我想更改 evaluator.evaluate() 方法以返回 Pair<List, List> 。就像是:

        final Pair<List<Object>, List<String>> pair = evaluators.parallelStream()
                .map(evaluator -> evaluate())
                ...?

这样,如果 evaluatorA 返回 Pair<[1,2], [a,b]> 并且 evaluatorB 返回 Pair<[3], [c,d]> 那么最终结果是 Pair<[1,2,3], [a,b,c,d]>。

谢谢你的帮助。

4

1 回答 1

0

我最终为一对列表实现了一个客户收集器:

...
    .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());
        }
    );
于 2021-01-05T21:24:42.123 回答