import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class RandomSelect {
    public static void main(String[] args) {
        String[] names = {"杨","刘","赵","范","张","李","宋","周","郭","任",
                "韩","张","张","田","贾","何","袁","姬","邹","蔻","杨","杨"};
        
        List<List<String>> gl = getGroup(names, 3);   //分3组
        System.out.println("总人数:"+names.length+"人");
        if(gl != null) {
            for (List<String> l : gl) {
                System.out.println(l);
            }
        }
    }

/**
     * 获取随机数
     */
    public static int getRandom(int i) {
        Random r = new Random();
        return r.nextInt(i);
    }

/**
     * 进行分组 els 需要进行分组的成员 groups 需要分成几组
     */
    public static List<List<String>> getGroup(String[] els, int groups) {
        // 判断验证
        if (els.length < (groups * 2)) {
            System.out.println("分组数过多! 最多只能分" + (els.length / 2) + "组");
            return null;
        }
        if (groups == 1) {
            System.out.println("分组数不能为1组");
            return null;
        }
        // 数据源的list
        List<String> list = new ArrayList<String>();
        // 作为结果返回的list
        List<List<String>> groupsList = new ArrayList<List<String>>();
        // List<Map<String, String>> groupsList = new ArrayList<List<String>>();
        // 往数据源里面添加数据
        for (int i = 0; i < els.length; i++) {
            list.add(els[i]);
        }
        // 随机打乱一下顺序
        Collections.shuffle(list);
        // 计算一下每组多少人
        int peoples = els.length / groups;
        // 分组开始
        for (int i = 0; i < groups; i++) {
            List<String> group = new ArrayList<String>();
            for (int j = 0; j < peoples; j++) {
                int random = getRandom(list.size());
                group.add(list.get(random));
                list.remove(random);
            }
            groupsList.add(group);
        }
        // 最后剩下的人再重新分配一遍
        for (int i = 0; i < list.size(); i++) {
            groupsList.get(i).add(list.get(i));
        }
        return groupsList;
    }
}

Java人员随机分组相关推荐

  1. java随机动态分组_Java将一组数随机分组

    试题:一个班40个学生,请把学生随机分成8组 既然是随机分组,必然用到随机数,其分组思路是: 用一个链表存储这组数,随机获取A中的元素下标,然后打印这个数,并从A中移除,直到A中全部为空 import ...

  2. java 8 集合分组_Java 8:按集合分组

    java 8 集合分组 在继续阅读Venkat Subramaniam的" Java函数式编程 "时,我到达了介绍Stream#collect函数的那部分. 我们想收集一个人,按年 ...

  3. 11、16支足球队随机分组

    编程题目: 11.将16支足球队随机分成四组: 科特迪瓦 阿根廷 澳大利亚 塞尔维亚 荷兰 尼日利亚 日本 美国 中国 新西兰 巴西 比利时 韩国 喀麦隆 洪都拉斯 意大利 示例代码: package ...

  4. 自动平衡男女比例的随机分组软件B2G使用教程,献给组织

    操作演示视频二维码: 自动平衡男女比例的随机分组软件B2G APP(v1.0)上线 ,B2G随机分组软件交流群:489950969,@author by CYJ cyjlnk@foxmail.com ...

  5. java web随机抽取_java实现随机抽取奖品工具类

    本文实例为大家分享了java实现随机抽取奖品工具类的具体代码,供大家参考,具体内容如下 随机抽取奖品 整体思路: 1.奖品集合 + 概率比例集合 2.将奖品按集合中的顺序概率计算成所占比例区间,放入比 ...

  6. 归约操作java8_使用Java 8进行分组,转换和归约

    归约操作java8 1.简介 在上一篇文章中 ,我写了关于如何使用流和分组对对象集合进行分组的文章. 这很有用,但不涵盖特定的用例. 例如,有时我们不仅需要对事物进行分组,还需要将结果转换为更合适的对 ...

  7. 使用Java 8进行分组,转换和归约

    1.简介 在上一篇文章中 ,我写了关于如何使用流和分组对对象集合进行分组的文章. 这很有用,但不涵盖特定的用例. 例如,有时我们不仅需要对事物进行分组,还需要将结果转换为更合适的对象. 在这篇文章中, ...

  8. c语言程序如何实现分组,c程序-实现随机分组.ppt

    c程序-实现随机分组 题目: √ 对全班学生进行随机分组: 1.要求任意输入一组班级学生数据: 2.要求任意输入确定组数: 3.要求分组学生随机分配: 4.能够正确显示分组结果: 核心思路 通过按学生 ...

  9. java 正负随机_如何产生一个随机的[0, n)范围内的Short值

    背景 最近在做一个Java的随机对象生成器.需要随机产生一些在[0, n)范围内的short值. 坑 很多人可能会说,这有什么难的,我刚学编程的时候就会了.然后给出下面代码. short value ...

最新文章

  1. 重温一遍数据结构之单链表(golang版)
  2. 开源作品ThinkJDBC—一行代码搞定数据库操作
  3. 前端基础知识整理汇总(上)
  4. Android 访问本地 HTML
  5. 富文本编辑器宽度自适应及取消自动保存功能
  6. 对于javaScript闭包,立即执行函数的用法的一些理解
  7. php面向对象之单表操作类
  8. Hadoop环境 IDE配置(在eclipse中安装hadoop-eclipse-plugin-2.7.3.jar插件)
  9. mysql group by cube_SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE
  10. 计算机网络作用范围网络分为,【填空题】从不同作用范围分类,计算机网络可以分为广域网、_______、_________、_________四种...
  11. 一款基于SpringCloudAlibaba从0到1手敲的商城项目mtg-shop
  12. 常见的各种字幕内容总结(字幕基础、字幕介绍、字幕种类及常见格式、SRT+ASS+LYC等等)
  13. 如何利用JDK8彻底弄懂UNIX时间戳与时区的概念!
  14. 会议及作用篇--项目管理(十六)
  15. 计算机图形学学习笔记(5.1)几何造型与样条
  16. 扇贝编程python学习笔记-基础篇4
  17. Unity 脚本中的几种等待方法
  18. mysql 5.7.21 winx64_mysql5.7.21 winx64安装配置图文分享
  19. 国内开源商城系统如何选型
  20. 【毕业季·进击的技术er】 什么是微信小程序,带你推开小程序的大门

热门文章

  1. PostgreSQL助力小微企业管理系统变革
  2. MFC Windows程序设计学习笔记--文件和串行化
  3. iphone4 快捷键整理
  4. Eclipse设置自动保存
  5. gitlab上创建新的分支并发布代码
  6. 最新论文笔记(+11):Privacy-Preserving Searchable Encryption Framework for Permissioned Blockchain Networks
  7. java建立英文停用词表_pyhanlp 停用词与用户自定义词典
  8. Android之Canvas画笔和画布
  9. 详细了解 Linkerd 2.10 基础功能,一起步入 Service Mesh 微服务架构时代
  10. 深信服edr终端漏洞