自动分配会议桌demo
2016-05-05 14:40
295 查看
这里主要是原理的实现,不管界面问题----------------------------------------------------- ---------------------------------------------------------------------------------------------------- -----------------------------------------------首先创建一个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;}}和一个table类:
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("////////////////////////////////////");}}}仅供自己参考用,增加对集合的理解和运用
相关文章推荐
- python的学习笔记
- 64位ubuntu16.04安装Android Studio
- swift中的convenience
- MyBatis学习总结(三)——优化MyBatis配置文件中的配置
- nginx安装及其配置
- C语言基础: 浮点数转化整数(向上取整、向下取整)| 求绝对值函数
- 欢迎使用CSDN-markdown编辑器
- AngularJS指令进阶 – ngModelController详解
- GIF动画的实现
- jQuery插件ajaxfileupload.js实现上传文件
- 二叉查找树BST
- Lua_第28章 资源管理(上)
- 基于svn的版本发布工具
- 【Bugly干货分享】关于 Android N 那些你不知道的事儿
- elasticsearch 集群搭建
- [Driver] Asix AX88772 kernel module (USB Ethernet)
- 代码的耗时操作
- 代理模式与动态代理
- iOS中的加密操作
- Xcode7.3打包ipa文件 报错和解决