Arrays.asList(new String[]{"1,张三,50", "2,李四,80", "3,王五,40", "4,张三,90", "5,王五,70"});

我这里没有使用TreeMap实现
而是使用3个List(name、score、len)分别存放所有姓名、每个姓名的总分数、每个姓名分数的个数
name、score、len的下标是一一对应的,也就是name的下标为1,那么score的下标为1就是下标为1的name的总分数,len也是一样
当然也可以把name、score作为HashMap的key、value来实现

public class Exam {

	public static void main(String[] args) {
		List list = Arrays.asList(new String[]{"1,张三,50",
				"2,李四,80", "3,王五,40", "4,张三,90", "5,王五,70"});
		List strList = new ArrayList();
		//按逗号把每一个String分成一个String数组,存到strList列表中
		for(String str : list){
			strList.add(str.split(","));			
		}
		//存放所有name
		List name = new ArrayList();
		//存放每一个name的总分数
		List score = new ArrayList();
		//存放每一个name分数的个数
		List len = new ArrayList();
		//初始化name、score、len(把strList的第一项赋值给name、score,len赋值为1
		name.add(strList.get(0)[1].trim());
		score.add(Double.parseDouble(strList.get(0)[2].trim()));
		len.add(1);
		boolean flag = false;
		/*
		 * strList每一项String数组的第二个(也就是名字)与name列表比较
		 * 如果有一个相等,name列表的那一项的分数与strList相等的那一项的分数相加,长度加1
		   如果没有相等,则name、score、len执行add()方法,也就是把strList那一项的名字和分数作为add()的参数
		 */
		for(int i = 1; i < strList.size(); i++){
			for(int j = 0; j < name.size(); j++){
				if(strList.get(i)[1].trim().equals(name.get(j))){
					Double b = Double.parseDouble(strList.get(i)[2].trim());
					score.set(j, b + score.get(j));
					len.set(j, len.get(j)+1);
					flag = true;
					break;
				}
			}
			if(flag){
				flag = false;
			}else{
				name.add(strList.get(i)[1].trim());
				score.add(Double.parseDouble(strList.get(i)[2].trim()));
				len.add(1);
			}
		}
		//把每一项的分数计算平均分
		for(int i =0; i < score.size(); i++){
			score.set(i, score.get(i) / len.get(i));
		}
		Double tem;
		String str;
		Integer ing;
		//使用冒泡排序对分数进行升序排序,name和len也相应调整
		for(int i = 0; i < score.size()-1; i++){
			for(int j = 0; j < score.size()-1-i; j++){
				if(score.get(j) > score.get(j+1)){
					tem = score.get(j);
					score.set(j, score.get(j+1));
					score.set(j+1, tem);
					str = name.get(j);
					name.set(j, name.get(j+1));
					name.set(j+1, str);
					ing = len.get(j);
					len.set(j, len.get(j+1));
					len.set(j+1, ing);
				}
			}
		}
		//打印输出
		for(int i = 0; i < name.size(); i++){
			System.out.println(name.get(i)+"--"+score.get(i)+"--"+len.get(i));
		}
	}
}

你可能感兴趣的:(Arrays.asList(new String[]{"1,张三,50", "2,李四,80", "3,王五,40", "4,张三,90", "5,王五,70"});)