首页 > 解决方案 > 如何将列表中的员工随机分配到 4 个不同的组

问题描述

是的,对不起,混淆!我的业务需求是:一个 Employee 对象,它包含一个员工列表,每个员工都有 groupNumber (1-4);我希望员工在包括他们自己在内的所有其他群体中获得经验。在每个组中,我希望看到至少 1 名来自不同组的员工(理想情况是在来自不同组的新生成组中拥有 4 名员工)。下面的代码正在执行随机命令,我应该使用什么来应用上述条件。感谢您的任何建议。

public class EmployeeTest {

    public static void main(String[] args) {
        Random random = new Random();
        int group_num = random.nextInt(30);
        int max = 0;

        if(max > 4) {
            group_num = 1;
            ArrayList<Employee> emps = new ArrayList();

            emps.add(new Employee("Tom", "Technology", 56, 34, 46, 23));
            emps.add(new Employee("Nick", "Technology", 65, 33, 21, 23));
            emps.add(new Employee("Jerry", "Technology", 56, 34, 46, 23));
            emps.add(new Employee("Janet", "Technology", 56, 34, 46, 23));
            emps.add(new Employee("Chitra", "Trading", 12, 54, 46, 23));
            emps.add(new Employee("Sally", "Trading", 16, 64, 46, 23));

            for(Employee e : emps) {
    //          Random random = new Random();
    //          int group_num = random.nextInt(30);
    //          int max =0;
    //          if(max > 4) {
    //              group_num = 1;

            }

            System.out.println("Employee | identifier: " + e.getUnicIdentifier() 
                + ", department: " + e.getDepartment()
                + ", texh_exp: " +  e.getTech_exp() 
                + " , trade_exp: " + e.getTrade_exp()
                + " , op_exp: " + e.getOp_exp()
                + ", shared_exp: " + e.getShared_exp()
                + ", group_num: " + group_num);
        }
    }
}

标签: javaarraysrandom

解决方案


https://stackoverflow.com/a/21743854/1160106怎么样?

Collections.shuffle(emps);

然后将其分成 4 个连续的组。

这就是您可以将它们分成4组的方法

    int nGroups = 4;
    final AtomicInteger counter = new AtomicInteger();
    final Collection<List<Employee>> allGroups = emps.stream()
            .collect(Collectors.groupingBy(it -> counter.getAndIncrement() % nGroups))
            .values();

allGroups大小为 4。每个人随机包含员工。


推荐阅读