我有Doctor类和Doctor(cd)类的对象集合,
每个医生内部都有一组患者,我需要按患者数量对医生进行排序,并返回包含其名称和患者数量的字符串集合,所以这是我的代码:

    Collection <String> output;
    output = cd.stream()
               .sorted(new Comparator<Doctor>(){
                    @Override
                    public int compare(Doctor d1, Doctor d2){
                    return d1.getPatients().size()-d2.getPatients().size();}})
            .map(String.format("%d : %s %s", d->d.getPatients().size, d.getName, d.getSurname))
            .collect(Collectors.toList());


所以我的问题是上面的代码是否正确,并且如果不实现Comparable接口,是否可以做得更好?您也可以在代码的String.format部分帮助我,那里有些问题。

谢谢

抱歉,关于String.format()的不确定性,Eclipse表示:


d无法解析为变量

最佳答案

comparing中有一个方便的Comparator方法,省去了手动编写比较器的麻烦。

您可以像这样使用它:

output = cd.stream()
           .sorted(Comparator.comparing(d -> d.getPatients().size()))
...


正如Holger指出的那样,由于您正在比较int,因此您可能更喜欢使用comparingInt代替comparing

对于格式化部分,map需要一个函数(这是d -> ...的意思),并且format的参数应该只是值,而不是函数。

因此,您可以使用以下格式进行格式化:

           .map(d -> String.format("%d : %s %s", d.getPatients().size(), d.getName(), d.getSurname()))

10-08 08:38