繁体   English   中英

如何在流API中实现匿名比较器,更精确地说是sorted()?

[英]How to implement anonymous comparator inside stream API, more precisely sorted()?

我有一个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());

因此,我的问题是上面的代码是否正确,并且在没有可比较接口的实现的情况下能否做得更好? 您也可以在代码的String.format部分中帮我,那里有些问题。

谢谢

EDIT1对不起,关于不确定性的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()))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM