rel*_*ood 9 java collections comparator java-8 java-stream
我想通过一个可空字段对对象列表进行排序.
为了避免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
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能对这种清单进行排序?
ETO*_*ETO 16
你应该使用Comparator.nullsLast两次:
list.sort(nullsLast(comparing(Bean::getVal, nullsLast(naturalOrder()))));
Run Code Online (Sandbox Code Playgroud)
nullsLast将处理Bean对象为null 时的情况.nullsLast将处理返回值为Bean::getValnull时的情况.如果你确定null列表中没有任何值,那么你可以省略第一个nullsLast(如@Holger所述):
list.sort(comparing(Bean::getVal, nullsLast(naturalOrder())));
Run Code Online (Sandbox Code Playgroud)
你可以使用:
Collections.sort(l, Comparator.comparing(Bean::getVal,
Comparator.nullsLast(Comparator.naturalOrder())));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1905 次 |
| 最近记录: |