在 Java 里用 Comparator 时,空值(null)一定要显式处理,否则会抛 NullPointerException。常见处理方式如下:
Comparator<String> cmp = Comparator
.nullsLast(Comparator.naturalOrder());
List<String> list = Arrays.asList("b", null, "a", null, "c");
list.sort(cmp);
// [a, b, c, null, null]
✅ nullsLast:null 放最后
✅ nullsFirst:null 放最前
Comparator<String> cmp = Comparator
.nullsFirst(Comparator.naturalOrder());
Comparator<Person> cmp = Comparator
.comparing(Person::getName,
Comparator.nullsLast(Comparator.naturalOrder()));
Comparator<Person> cmp = Comparator
.comparing(Person::getAge,
Comparator.nullsLast(Integer::compareTo))
.thenComparing(Person::getName,
Comparator.nullsLast(String::compareTo));
Comparator<String> cmp = (a, b) -> {
if (a == null && b == null) return 0;
if (a == null) return 1; // null 在后
if (b == null) return -1;
return a.compareTo(b);
};
list.stream()
.sorted(Comparator.nullsLast(Comparator.naturalOrder()))
.collect(Collectors.toList());
Comparator.nullsFirst / nullsLast如果你有具体场景(比如 Map、自定义对象、降序),可以贴代码我帮你写。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。