java - 如何将列表中的员工随机分配到 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);
}
}
}
解决方案
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。每个人随机包含员工。
推荐阅读
- python - 无需从 Python 应用程序编译即可从 C/C++ 代码获取 AST
- swift - 用户登录应用程序后如何在视图上使用导航控制器?
- regex - 使用 re.compile 编译列表中的多个字符串
- javascript - 如何在 Laravel 和 Vuejs 中实现服务端渲染?
- python - 如何在数据框中添加与其他列相关的特定列
- javascript - 如何在上标语法“^(text)”中支持 Markdown 链接语法“[text](link)”?
- arrays - 当您可以更改每个元素符号时,找到元素总和最接近零的数组版本
- python - 在容器中显示 matplotlib 图
- reactjs - React Native:一句话中的多种字体
- mysql - SQL:仅使用 UPDATE 的一个查询中所有列的总和