Java流问题

Java流问题,java,list,java-8,java-stream,Java,List,Java 8,Java Stream,我正在使用java中的streams进行培训 这就是要求: 返回字符串列表 包含医生姓名和患者的相对人数 按递减的数字排序。 字符串的格式必须为“###:ID姓氏名称”,其中### 表示患者数量(以三个字符打印) public Collection doctorsByNumPatients(){ SortedMap a=doctors.values().stream()。 收集(分组方式(d->d.getPatients().size(),()->newtreemap(reverseOrder(

我正在使用java中的streams进行培训

这就是要求: 返回字符串列表 包含医生姓名和患者的相对人数 按递减的数字排序。 字符串的格式必须为“###:ID姓氏名称”,其中### 表示患者数量(以三个字符打印)

public Collection doctorsByNumPatients(){
SortedMap a=doctors.values().stream()。
收集(分组方式(d->d.getPatients().size(),()->newtreemap(reverseOrder()),映射(Doctor::toString,toList());
返回a.entrySet().stream()。
??????????
}
(医生::toString返回ID名称姓氏)

我编写了这段代码,但无法完成,因为我不知道如何使用流将映射转换为请求中建议的字符串列表。我解决了一个类似的问题,但是使用一个循环来处理映射,在这个循环中,每次迭代我都初始化一个迭代器来扫描值(列表),并为任何列表中的每个医生生成一个字符串

很好的尝试

我建议:

public Collection<String> doctorsByNumPatients() {
    return doctors.values()
            .stream()
            .sorted(Comparator.comparing((Doctor d) -> d.getPatients().size()).reversed())
            .map(d -> String.format("%3d %s", d.getPatients().size(), d.toString()))
            .collect(Collectors.toList());
}

flatMap()
是当流中的每个元素都包含一个集合,并且希望将内部集合的每个元素作为外部流中的元素进行处理时要使用的操作。在内部流中的
map()
操作中,我们可以访问内部元素
s
,以及外部元素
e

为什么首先要将医生存储在地图中?为什么不按专利大小按相反顺序对医生进行排序(使用sorted()),然后将每个医生转换为字符串(使用map()),然后将字符串收集到列表中(使用collect())?但我如何才能以这种方式保存每个医生的患者数量?使用
doctor.getPatients()可以获得患者数量.size()
。你为什么认为你需要把这些信息存储在其他地方?好吧,我按照你说的解决了。我不知道为什么我按大小分组。我很愚蠢:D但是在入口集打开后有没有办法解决这个问题?谢谢!!!在这种情况下,我回答如何做是错误的,因为有一个简单的方法来解决它。但我发现只有这样才能解决问题,所以非常感谢!!普雷戈!很高兴你能用上它。请随意标记为已接受(单击答案左侧的勾号)。
public Collection<String> doctorsByNumPatients() {
    return doctors.values()
            .stream()
            .sorted(Comparator.comparing((Doctor d) -> d.getPatients().size()).reversed())
            .map(d -> String.format("%3d %s", d.getPatients().size(), d.toString()))
            .collect(Collectors.toList());
}
    return a.entrySet()
            .stream()
            .flatMap(e -> e.getValue().stream().map((String s) -> String.format("%3d %s", e.getKey(), s)))
            .collect(Collectors.toList());