在 Java 里,Comparator 为 null通常分几种场景,不同情况处理方式不一样。下面给你一个清晰对照:
Comparator 本身就是 null(你手里这个比较器是 null)比如:
Comparator<String> comparator = null;
list.sort(comparator); // ❌ 会抛 NullPointerException
list.sort(comparator != null ? comparator : Comparator.naturalOrder());
或:
Comparator<String> cmp = Optional.ofNullable(comparator)
.orElse(Comparator.naturalOrder());
list.sort(cmp);
Comparator.nullsFirst / nullsLast(防止元素为 null)Comparator<String> safe = Comparator.nullsFirst(
comparator != null ? comparator : Comparator.naturalOrder()
);
list.sort(safe);
List<String> list = Arrays.asList("a", null, "b");
list.sort(Comparator.naturalOrder()); // ❌ NPE
list.sort(Comparator.nullsLast(Comparator.naturalOrder()));
或:
list.sort(Comparator.nullsFirst(String::compareTo));
public static <T> void sort(List<T> list, Comparator<T> cmp) {
list.sort(cmp != null ? cmp : Comparator.naturalOrder());
}
如果你是:
Collections.sort(list, comparator)Stream.sorted(comparator)规则一样:
null Comparator 一定要兜底
Comparator 为 null 不要直接交给 sort,一定要先给默认值或兜底处理。
如果你能贴一段具体代码(哪一行报 null),我可以直接帮你改到可用版本。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。