如何对 Java Hashmap 的值求和

3 java hashmap

我需要一些帮助,我试图获得值的总和,但我卡住了我想求和的地图值

Grades grades = new Grades(Arrays.asList(1,2,3,4));
Grades grades2 = new Grades(Arrays.asList(2,3,4,5));
Grades grades3 = new Grades(Arrays.asList(4,5,6,1));
Grades grades4 = new Grades(Arrays.asList(1,2,2,4));

HashMap<Pupil, Grades> map = new HashMap<Pupil, Grades>();
map.put(pupil, grades);
map.put(pupil1, grades2);
map.put(pupil2, grades3);
map.put(pupil3, grades4);
Run Code Online (Sandbox Code Playgroud)

我试图通过使用 for-each 来做到这一点

int sum = 0;
for (int a : map.values()) {
    sum += a;
}
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误 "incompatible types: Grades cannot be converted to int, line 49"

class Grades{

    private List<Integer> grades;

    public Grades(List<Integer> grades){
        this.grades = grades;
    }
}
Run Code Online (Sandbox Code Playgroud)

azr*_*zro 5

该方法在此处HashMap.values()返回 a ,因此在迭代时您会得到 a 。然后每个人都有一个列表Collection<V>Collection<Grades>GradeGradeint

int sum = 0;
for (Grades g : map.values()) {
    for(int a : g.getGrades()){ // use the getter name you have in Grade class
        sum += a;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用Streams它看起来像

 int sum = map.values()                    // Collection<Grades>
              .stream()                    // Stream<Grades>
              .map(Grades::getGrades)      // Stream<List<Integer>>
              .flatMap(List::stream)       // Stream<Integer>
              .mapToInt(Integer::intValue) // IntStream
              .sum();                      // int
Run Code Online (Sandbox Code Playgroud)