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