我有以下课程:
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
及其价值。
答案 0 :(得分:7)
markList.stream().collect(
groupingBy(
Mark::getSubject,
() -> new EnumMap<Subject, Integer>(Subject.class),
summingInt(Mark::getValue)));