例如,我有一个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/

10-09 03:41