这里主要是原理的实现,不管界面问题
----------------------------------------------------- ---------------------------------------------------------------------------------------------------- -----------------------------------------------
首先创建一个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 {
//没有公司的人色暂时分组key
private static final String NonCompany = "noncompany" ;
//全局桌号 桌号排序,每次生成一个桌子+1
private 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("");
}
}
}
仅供自己参考用,增加对集合的理解和运用