带有和的Java 8 List到EnumMap

时间:2017-01-19 01:24:45

标签: java java-8

我有以下课程:

public class Mark {

    private Long id;

    private Student student;

    private Integer value = 0;

    private Subject subject;

}

public enum Subject {

    MATH,
    CHEMISTRY

}

我必须收到EnumMap<Subject, Integer>,其中值是Mark中所有值的总和。
List<Mark>

的示例
  

标记(...,值= 1,主题= MATH)
  标记(...,值= 2,主题= MATH)
  标记(...,值= 5,主题=化学)

有了这个值,我必须收到以下EnumMap

  

MATH - &gt; 3
  化学 - &gt; 5

我认为应该使用Collectors::groupingBy,但我无法理解如何获得EnumMap及其价值。

1 个答案:

答案 0 :(得分:7)

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