使用 java 流按映射中的值进行分组

sar*_*are 1 java hashmap java-8 java-stream

我有班级中的学生成绩地图,我想按成绩进行计数,可以通过迭代值然后增加地图中的计数来完成,是否有更好的使用 Streams 的方法。

    Map<String, String> grades = new HashMap();
    grades.put("100", "A");
    grades.put("101", "B");
    grades.put("102", "A");
    grades.put("103", "C");
    grades.put("104", "D");
    grades.put("105", "B");
    grades.put("106", "B");
    grades.put("107", "C");
Run Code Online (Sandbox Code Playgroud)

我的输出映射应该有 A=2、B=3、C=2、D=1

rav*_*iru 9

Collectors.groupingBy像这样使用

Map<String,Long> groupByGrades=  grades.values().stream().
      collect(Collectors.groupingBy(Function.identity(),    
      Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)