我想通过也是POJO的属性对POJO列表进行排序。比较器应将null
的值移到列表的末尾。 null
已处于第二POJO级别。
假设以下POJO:
public class Foo {
private Bar bar;
private boolean set;
// getter and setter omitted
}
public class Bar {
private String name1;
private String name2;
// getter and setter omitted
}
现在我有一个List<Foo>
,应该按Bar#name1
排序。
到目前为止,我有以下代码:
Collections.sort(fullList,Comparator.comparing(Foo::getBar::getName1,Comparator.nullsLast(Comparator.naturalOrder())));
可悲的是,这无法正常工作,因为::
运算符无法被链接。因此,我更新了Bar
类以实现Comparator<Bar>
public class Bar implements Comparator<Bar> {
private String name1;
private String name2;
// getter and setter omitted
@Override
public int compare(Bar o1,Bar o2) {
return o1.getName1().compareTo(o2.getName1());
}
}
并将我的排序代码更改为:
Collections.sort(fullList,Comparator.comparing(Foo::getBar,Comparator.nullsLast(Comparator.naturalOrder())));
但这给了我编译错误:
Comparator类型中的compareing(Function,Comparator)方法不适用于参数(Foo :: getBar,Comparator >>)
以及
类型Foo没有定义适用于此的getBar(T)
第二部分我做错了什么?我该如何解决?
编辑:
我刚刚意识到缺少一个关键部分。
在列表中,Foo
从未为null
,但是Bar
可能为null
。在Bar
为null
的情况下,Foo
应该移到列表的末尾。