我需要一些帮助,我试图获得值的总和,但我卡住了我想求和的地图值
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)
该方法在此处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)
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |