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;
	}
	
	
}