自动分配会议桌demo
来源:互联网 发布:mac path finder 下载 编辑:程序博客网 时间:2024/05/01 14:09
这里主要是原理的实现,不管界面问题
接下来就是一个demo的处理方法,直接写在main中测试:
----------------------------------------------------- ---------------------------------------------------------------------------------------------------- -----------------------------------------------
首先创建一个Person类
package com.qsban.demo;/** * 员工参与会议 * * @author Tao * */public class Person {private int id;private String companyId;//private String tableId;private String name;public String getCompanyId() {return companyId;}public void setCompanyId(String companyId) {this.companyId = companyId;}public String getName() {return name;}public void setName(String name) {this.name = name;}/*public String getTableId() {return tableId;}public void setTableId(String tableId) {this.tableId = tableId;}*/public int getId() {return id;}public void setId(int id) {this.id = id;}}
package com.qsban.demo;import java.util.List;/** * * 会议桌 * * @author Tao * */public class Table {private int id;private int amount;private List<Person> list;public List<Person> getList() {return list;}public void setList(List<Person> list) {this.list = list;}public int getAmount() {return amount;}public void setAmount(int amount) {this.amount = amount;}public int getId() {return id;}public void setId(int id) {this.id = id;}}
接下来就是一个demo的处理方法,直接写在main中测试:
package com.qsban.demo;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;public class APIDemo {//没有公司的人色暂时分组keyprivate static final String NonCompany = "noncompany" ;//全局桌号 桌号排序,每次生成一个桌子+1private static int TableNo = 1;/** * * @param amount 每桌人数 * @param pList 数据库中取得参与会议的人List * @return */public static List<Table> getResult(int amount, List<Person> pList){if(amount<=0){return null;}//接收返回数据List<Table> result = new ArrayList<Table>();Map<String,List<Person>> exist= new HashMap<String,List<Person>> (); //没有公司名的组List<Person> list0 = new ArrayList<Person>();exist.put(NonCompany, list0);//按公司名称分成若干组for(Person person:pList){String cId = person.getCompanyId();if("".equals(cId)||cId==null){List<Person> list = exist.get(NonCompany);list.add(person);exist.put(NonCompany, list);}else{dealHasCompanyPerson(exist,person);}}//分配桌子Iterator iter = exist.entrySet().iterator();//处理exist中人数等于amount的,优先分配该公司分组恰好是amount的while(iter.hasNext()){//iter = exist.entrySet().iterator();Map.Entry entry = (Map.Entry)iter.next();List<Person> values = (List<Person>)entry.getValue();if(amount==values.size()){Table t= createTable(amount);t.setList(values);result.add(t);//删除iter.remove();}}//处理 剩下的 公司分组人员List<Person> extra = new ArrayList<>();iter = exist.entrySet().iterator();while(iter.hasNext()){Map.Entry entry = (Map.Entry)iter.next();List<Person> values = (List<Person>)entry.getValue();extra = dealGroupByAmount(values, amount, result,extra);}List<Person> lastL = new ArrayList<Person>();//处理extra中的人数 即上面每个分组中剩余的人,给他们分配桌子lastL = dealGroupByAmount(extra, amount, result,lastL);//最后一组if(lastL.size()>0){Table lastT= createTable(lastL.size());lastT.setList(lastL);result.add(lastT);}return result;}/** * 处理分组中的人 * @param values * @param amount * @param result * @param extra * @return */private static List<Person> dealGroupByAmount(List<Person> values,int amount,List<Table> result,List<Person> extra){int times = values.size()/amount;int c0=0;for(int j=0;j<values.size();j+=amount){if(values.size()>=amount){if(c0<times){Table t= createTable(amount);if(j<=amount){t.setList(values.subList(j, amount));}else{t.setList(values.subList(j, values.size()));}result.add(t);}else{extra.addAll(values.subList(j,values.size()));}}else{extra.addAll(values);}c0++;}return extra;}/** * 创建桌 * @param amount * @return */private static Table createTable(int amount){Table t= new Table();t.setAmount(amount);t.setId(TableNo);TableNo++;return t;}/** * 处理有公司的与会人员 * @param exist * @param person * @return */private static Map<String,List<Person>> dealHasCompanyPerson(Map<String,List<Person>> exist,Person person){String cId = person.getCompanyId();List<Person> list = new ArrayList<Person>();if(exist.containsKey(cId)){ list = exist.get(cId);}list.add(person);exist.put(cId, list);return exist;}public static void main(String[] args) {int amount = 1;List<Person> pList = new ArrayList<Person>();for(int i=0;i<5;i++){Person p = new Person();StringBuffer temp = new StringBuffer();p.setCompanyId(temp.append(String.valueOf(i)).append("abc").toString());p.setId(i);p.setName("拉拉");pList.add(p);}Person p1 = new Person();p1.setCompanyId("1abc");p1.setId(34);p1.setName("拉拉");pList.add(p1);Person p2 = new Person();p2.setCompanyId("1abc");p2.setId(34);p2.setName("拉拉");pList.add(p2);List<Table> list= getResult(amount, pList);for(Table t:list){System.out.println("桌号:"+t.getId());System.out.println("数量:"+t.getAmount());List<Person> p = t.getList();for(Person person:p){System.out.println("人ID:"+person.getId());System.out.println("公司名称:"+person.getCompanyId());}System.out.println("////////////////////////////////////");}}}
仅供自己参考用,增加对集合的理解和运用
0 0
- 自动分配会议桌demo
- div自动分配高度
- win7 IP 自动分配
- 自动分配座位
- centos 自动分配ip
- 自动依赖扫描-demo
- FA 分配已有资产 API Demo
- 动态内存分配的一个小Demo
- 自动分配UDP本地端口
- DHCP多VLAN自动分配
- ipv6 地址自动分配解析
- android demo自动开启WiFi
- 自动提取文本关键词demo
- mybatis自动生成代码demo
- 自动填充插件Autocomplete demo
- 通用自动分配小类库AutoAllot,专注于分配逻辑
- cisco 802.1X进行自动VLAN分配
- OpenGL自动为每个顶点分配坐标
- js读取json文件数据
- ImageMagick漏洞演示
- Linux下~Hash表的构建与应用(包括内核文件list.h分析)
- Maven学习总结(九)——使用Nexus搭建Maven私服
- UINavigationController先pop再push
- 自动分配会议桌demo
- 代码的耗时操作
- FPGA实现cordic算法
- 给jquery对象添加自定义方法和扩展jquery类
- angularjs中循环定时器的三种方法
- easyUi 导航
- 使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法
- 数据结构实验之栈六:下一较大值(二)
- java jar 配置文件的相对路径问题