[英]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的说:
有一个方便的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.