自动分配会议桌demo

来源:互联网 发布:mac path finder 下载 编辑:程序博客网 时间:2024/05/01 14:09

这里主要是原理的实现,不管界面问题




-----------------------------------------------------     ----------------------------------------------------------------------------------------------------     -----------------------------------------------

首先创建一个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("////////////////////////////////////");}}}

仅供自己参考用,增加对集合的理解和运用









0 0
原创粉丝点击