收集器的Combine从未要求并行流

问题描述

我正在尝试与以下代码并行运行收集器。从不调用“ combiner”方法,因此看起来收集器仍按顺序运行。为什么?如何使其平行?

import java.util.ArrayList;
import java.util.EnumSet;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.function.BiConsumer;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collector;

public class TestCollector {

    private static class Staff {

        private String staffFullName;

        private int staffID;

        public String getStaffFullName() {
            return staffFullName;
        }

        public void setStaffFullName(String staffFullName) {
            this.staffFullName = staffFullName;
        }

        public int getStaffID() {
            return staffID;
        }

        public void setStaffID(int staffID) {
            this.staffID = staffID;
        }
    }

    private static class StaffCollector implements Collector<Staff,Queue<Staff>,Staff[]> {

        @Override
        public Supplier<Queue<Staff>> supplier() {
            return ConcurrentLinkedQueue::new;
        }

        @Override
        public BiConsumer<Queue<Staff>,Staff> accumulator() {
            return (list,staff) -> list.add(staff);
        }

        @Override
        public BinaryOperator<Queue<Staff>> combiner() {
            return (left,right) -> {
                System.out.print("combiner called");
                left.addAll(right);
                return left;
            };
        }

        @Override
        public Function<Queue<Staff>,Staff[]> finisher() {
            return staffList -> {
                System.out.println("Number of staff: " + staffList.size());
                Staff[] staffArray = staffList.toArray(new Staff[0]);
                return staffArray;
            };
        }

        @Override
        public Set<Characteristics> characteristics() {
            return EnumSet.of(Characteristics.CONCURRENT,Collector.Characteristics.UNORDERED);
        }
    }
    public static void main(String[] args) throws Exception {
        ArrayList<Staff> staffList = new ArrayList<>();
        for (int i = 0; i < 10000; i++) {
            Staff staff = new Staff();
            staff.setStaffFullName("Staff " + i);
            staff.setStaffID(i);
            staffList.add(staff);
        }
        staffList.parallelStream().collect(new StaffCollector());
    }

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...