例如,我有一个Student
类
public class Student{
private String name;
private int age;
public int getAge(){
return this.age;
}
}
还有一个
School
类:public class School{
private Map<String,Student> students=new TreeMap<>();
//stroe the index of students in the school by key is their names.
public SortedMap<Integer,Long> countingByAge(){
return this.students.entrySet().stream().map(s->s.getValue())
.collect(groupingBy((Student s)->s.getAge(),counting()));
}
}
countingByAge方法要求返回
SortedMap<Integer,Long >
,关键是学生的年龄,值是每个不同年龄的学生人数,即我需要计算每个年龄段的学生人数。我几乎完成了该方法,但是我不知道如何在不进行
Map<Integer,Long>
强制转换的情况下将SortedMap<Integer,Long>
转换为(SortedMap<Integer,Long>)
。 最佳答案
您可以使用 groupingBy(classifier, mapFactory, downstream)
并作为mapFactory
通过供应商返回的实现SortedMap
的Map实例,例如TreeMap::new
public SortedMap<Integer, Long> countingByAge(){
return students.entrySet()
.stream()
.map(Map.Entry::getValue)
.collect(groupingBy(Student::getAge, TreeMap::new, counting()));
}
顺便说一句,作为@Holger mentioned in comment您可以简化
map.entrySet()
.stream()
.map(Map.Entry::getValue)
和
map.values()
.stream()
关于java - 如何在JAVA8中通过lambda表达式将Map转换为SortedMap?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31248741/