带有和的Java 8 List到EnumMap

Fee*_*eco 5 java java-8

我有以下课程:

public class Mark {

    private Long id;

    private Student student;

    private Integer value = 0;

    private Subject subject;

}

public enum Subject {

    MATH,
    CHEMISTRY

}
Run Code Online (Sandbox Code Playgroud)

我必须收到EnumMap<Subject, Integer>,其中值是来自的所有值的总和Mark.
示例List<Mark>:

Mark(...,value = 1,subject = MATH)
Mark(...,value = 2,subject = MATH)
Mark(...,value = 5,subject = CHEMISTRY)

有了这个价值,我必须收到以下内容EnumMap:

数学 - > 3
化学 - > 5

我认为应该这样做Collectors::groupingBy,但我无法理解如何获得EnumMap和他的价值.

Lou*_*man 8

 markList.stream().collect(
     groupingBy(
         Mark::getSubject,
         () -> new EnumMap<Subject, Integer>(Subject.class),
         summingInt(Mark::getValue)));
Run Code Online (Sandbox Code Playgroud)

  • 如果将结果赋值给`Map <Subject,Integer>`变量,或者在具有相似目标类型的任何上下文中使用它,则可以简化`() - > new EnumMap <Subject,Integer>(Subject.class) `到`() - >新的EnumMap <>(Subject.class)`... (3认同)