我想按可为空的字段之一对对象列表进行排序。
为了避免NullPointerexception
我使用Comparator.nullsLast
。但是仍然发生异常:
public class Test {
public static void main(String[] args) {
List<Bean> l = new ArrayList<>();
for (int i=0;i<5;i++) {
Bean b = new Bean("name_"+i,i);
l.add(b);
}
l.get(2).setVal(null);
System.out.println(l);
Collections.sort(l, Comparator.nullsLast(Comparator.comparing(Bean::getVal)));
System.out.println(l);
}
static class Bean{
String name;
Integer val;
// omit getters & setters & constructor
}
}
我如何对这种列表进行排序?
最佳答案
您应该使用Comparator.nullsLast
两次:
list.sort(nullsLast(comparing(Bean::getVal, nullsLast(naturalOrder()))));
nullsLast
将处理Bean
对象为null的情况。 nullsLast
将处理Bean::getVal
的返回值为null的情况。 如果您确定列表中没有
null
值,则可以省略第一个nullsLast
(如@Holger所指出):list.sort(comparing(Bean::getVal, nullsLast(naturalOrder())));
关于java - Comparator.nullsLast不能避免NullPointerException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53314193/