package com.xrime.innerloop.method; import java.util.ArrayList; import java.util.List; /** * 分组算法 * @author innerloop * */ public class GroupByMethod { //计算 public static List<ScClass> comput(List<Vo> voList){ List<ScClass> result = new ArrayList<ScClass>(); //思路 第一步 获取班级列表,第二步骤 便利 获取班级学生列表 //第一步 获取班级列表 List<ScClass> tempClassList = new ArrayList<ScClass>(); if(voList!=null&&voList.size()>0){ for(int i=0;i<voList.size();i++){ Vo temp = voList.get(i); if(!GroupByMethod.isClassExit(temp, tempClassList)){ ScClass sc = new ScClass(); sc.setClassId(temp.getClassId()); sc.setClassName(temp.getClassName()); tempClassList.add(sc); } } } //第二步骤 便利 获取班级学生列表 if(tempClassList!=null&&tempClassList.size()>0){ for(int i=0;i<tempClassList.size();i++){//便利班级 ScClass temp = tempClassList.get(i); List<ScStudent> tempStuList = new ArrayList<ScStudent>(); for(int k=0;k<voList.size();k++){ Vo cotemp = voList.get(k); if(temp.getClassId().equals(cotemp.getClassId())){//合并 ScStudent stu = new ScStudent(); stu.setStuId(cotemp.getStuId()); stu.setStuName(cotemp.getStuName()); tempStuList.add(stu); } } temp.setStuList(tempStuList); //设置到整体返回结果中 此处后续可以扩展 result.add(temp); temp = null; } } //gc tempClassList = null; return result; } public static boolean isClassExit(Vo vo, List<ScClass> classList){ boolean result = false; if(classList!=null&&classList.size()>0){ for(int i=0;i<classList.size();i++){ ScClass temp = classList.get(i); if(vo.getClassId().equals(temp.getClassId())){//已经存在,退出 不再判断 result = true; break; } } } return result; } public static List<Vo> getTestData(){ Vo vo1 = new Vo("1","1班","1","小明"); Vo vo2 = new Vo("1","1班","2","小王"); Vo vo3 = new Vo("2","2班","1","小孙"); Vo vo4 = new Vo("2","2班","2","小李"); List<Vo> voList = new ArrayList<Vo>(); voList.add(vo1); voList.add(vo2); voList.add(vo3); voList.add(vo4); return voList; } public static void main(String[] args) { List<ScClass> result = GroupByMethod.comput(GroupByMethod.getTestData()); for(int i=0;i<result.size();i++){ ScClass temp = result.get(i); //System.out.println(temp.toString()); } } } //中间 class Vo{ private String classId; private String className; private String stuId; private String stuName; public Vo(String classId,String className,String stuId,String stuName){ this.classId = classId; this.className = className; this.stuId = stuId; this.stuName = stuName; } public String getClassId() { return classId; } public void setClassId(String classId) { this.classId = classId; } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } public String getStuId() { return stuId; } public void setStuId(String stuId) { this.stuId = stuId; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } } //班级 class ScClass{ private String className; private String classId; private List<ScStudent> stuList = new ArrayList<ScStudent>(); public String toString(){ return "班级ID"+this.classId+",班级名称:"+this.className+"学生数量:"+this.stuList.size()+"||"; } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } public String getClassId() { return classId; } public void setClassId(String classId) { this.classId = classId; } public List<ScStudent> getStuList() { return stuList; } public void setStuList(List<ScStudent> stuList) { this.stuList = stuList; } } //学生 class ScStudent{ private String stuName; private String stuId; public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public String getStuId() { return stuId; } public void setStuId(String stuId) { this.stuId = stuId; } }