带有和的Java 8 List到EnumMap [英] Java 8 List to EnumMap with sums
问题描述
我有以下课程:
public class Mark {
private Long id;
private Student student;
private Integer value = 0;
private Subject subject;
}
public enum Subject {
MATH,
CHEMISTRY
}
我必须收到 EnumMap< Subject,Integer>
,其中value是 Mark
中所有值的总和。
列表< Mark>
的示例:
I have to receive EnumMap<Subject, Integer>
, where the value is the sum of all values from the Mark
.
Example of List<Mark>
:
Mark(...,value = 1,subject = MATH)
Mark(。 ..,value = 2,subject = MATH)
Mark(...,value = 5,subject = CHEMISTRY)
Mark(..., value = 1, subject = MATH)
Mark(..., value = 2, subject = MATH)
Mark(..., value = 5, subject = CHEMISTRY)
$ b带有该值的$ b
我必须收到以下 EnumMap
:
MATH - > 3
化学 - > 5
MATH -> 3
CHEMISTRY -> 5
我认为应该用<$ c $来完成c>收藏家:: groupingBy ,但我无法理解如何获得 EnumMap
及其价值。
I think it should be done with Collectors::groupingBy
, but I can't understand how to get EnumMap
and his value.
推荐答案
markList.stream().collect(
groupingBy(
Mark::getSubject,
() -> new EnumMap<Subject, Integer>(Subject.class),
summingInt(Mark::getValue)));
这篇关于带有和的Java 8 List到EnumMap的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!