【问题标题】:How to collect a Pair in a parallelStream in Java?如何在 Java 中的 parallelStream 中收集一对?
【发布时间】:2021-04-06 12:25:34
【问题描述】:

这里大概是我要修改的代码:

        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.

感谢您的帮助。

【问题讨论】:

    标签: stream collect parallelstream


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 2021-05-31
      • 1970-01-01
      • 2019-05-21
      • 1970-01-01
      • 2021-10-14
      • 2012-03-26
      相关资源
      最近更新 更多