将学生成绩按班级计算每一门课的平均分,得到班级课程平均分的一个list,并打印出来。包含字段:班级名称、课程、平均分。

/***
 *  描述:将学生成绩按班级计算每一门课的平均分。
 *  入参:
 *  参见studentScoreList
 *  需求:
 *  1、得到班级课程平均分的一个list,并打印出来。包含字段:班级名称、课程、平均分。
 *  2、按平均分降序排列。
 */
public class Common {
    public static void main(String[] args) {

        /***
         *  题 目:将学生成绩按班级计算每一门课的平均分。
         *  入参:
         *  参见studentScoreList
         *  需求:
         *  1、得到班级课程平均分的一个list,并打印出来。包含字段:班级名称、课程、平均分。
         *  2、按平均分降序排列。
         */

        List<Map<String, Object>> studentScoreList = getStudentScores();
        // 1.定义结果集
        List<Map<String, Object>> result = new ArrayList<>();
        // 2.定义分组结果集 key 是 班级#课程名称 value是 map
        Map<String, List<Map<String, Object>>> groupList = new HashMap<>();

        // 分组
        for (Map<String, Object> map : studentScoreList) {
            String key = map.get("班级") + "#" + map.get("课程名称");
            if (groupList.get(key) == null) {
                List<Map<String, Object>> list = new ArrayList<>();
                groupList.put(key, list);
            }
            groupList.get(key).add(map);
        }

        // 求平均分
        for (Map.Entry<String, List<Map<String, Object>>> entry : groupList.entrySet()) {
            String key = entry.getKey();
            List<Map<String, Object>> list = entry.getValue();
            if (list.size() > 0) {
                int sum = 0;
                for (Map<String, Object> map : list) {
                    sum += Integer.valueOf(map.get("成绩").toString());
                }
                double avg = sum * 1.0 / list.size();
                Map<String, Object> tempMap = new HashMap<>();
                tempMap.put("班级", key.split("#")[0]);
                tempMap.put("课程名称", key.split("#")[1]);
                tempMap.put("平均分", avg);
                result.add(tempMap);
            }

        }

        // 把result排序
        Collections.sort(result, new Comparator<Map<String, Object>>() {
            @Override
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                double d1 = Double.valueOf(o1.get("平均分").toString());
                double d2 = Double.valueOf(o2.get("平均分").toString());
                Integer num1 = (int) d1;
                Integer num2 = (int) d2;
                return num2.compareTo(num1);
            }
        });

        // 遍历result
        for (Map<String, Object> map : result) {
            System.out.println(map.get("班级") + "\t" + map.get("课程名称") + "\t" + map.get("平均分"));
        }


    }

    private static List<Map<String, Object>> getStudentScores() {
        List<Map<String, Object>> studentScoreList = new ArrayList<Map<String, Object>>();
        Map<String, Object> studentScore1 = new HashMap<String, Object>();
        studentScore1.put("班级", "一班");
        studentScore1.put("课程名称", "语文");
        studentScore1.put("姓名", "王一");
        studentScore1.put("成绩", "85");
        studentScoreList.add(studentScore1);

        Map<String, Object> studentScore2 = new HashMap<String, Object>();
        studentScore2.put("班级", "一班");
        studentScore2.put("课程名称", "数学");
        studentScore2.put("姓名", "王一");
        studentScore2.put("成绩", "89");
        studentScoreList.add(studentScore2);

        Map<String, Object> studentScore3 = new HashMap<String, Object>();
        studentScore3.put("班级", "一班");
        studentScore3.put("课程名称", "语文");
        studentScore3.put("姓名", "王二");
        studentScore3.put("成绩", "78");
        studentScoreList.add(studentScore3);

        Map<String, Object> studentScore4 = new HashMap<String, Object>();
        studentScore4.put("班级", "一班");
        studentScore4.put("课程名称", "数学");
        studentScore4.put("姓名", "王二");
        studentScore4.put("成绩", "98");
        studentScoreList.add(studentScore4);
        Map<String, Object> studentScore11 = new HashMap<String, Object>();
        studentScore11.put("班级", "二班");
        studentScore11.put("课程名称", "语文");
        studentScore11.put("姓名", "王三");
        studentScore11.put("成绩", "74");
        studentScoreList.add(studentScore11);

        Map<String, Object> studentScore12 = new HashMap<String, Object>();
        studentScore12.put("班级", "二班");
        studentScore12.put("课程名称", "数学");
        studentScore12.put("姓名", "王三");
        studentScore12.put("成绩", "97");
        studentScoreList.add(studentScore12);

        Map<String, Object> studentScore13 = new HashMap<String, Object>();
        studentScore13.put("班级", "二班");
        studentScore13.put("课程名称", "语文");
        studentScore13.put("姓名", "王四");
        studentScore13.put("成绩", "77");
        studentScoreList.add(studentScore13);

        Map<String, Object> studentScore14 = new HashMap<String, Object>();
        studentScore14.put("班级", "二班");
        studentScore14.put("课程名称", "数学");
        studentScore14.put("姓名", "王四");
        studentScore14.put("成绩", "83");
        studentScoreList.add(studentScore14);

        return studentScoreList;
    }


}

 


版权声明:本文为qq_37281398原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。