温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Comparator 为空咋办

发布时间:2026-09-13 04:01:41 来源:亿速云 阅读:91 作者:小樊 栏目:编程语言

在 Java 里,Comparator 为 null通常分几种场景,不同情况处理方式不一样。下面给你一个清晰对照:


一、Comparator 本身就是 null(你手里这个比较器是 null)

比如:

Comparator<String> comparator = null;
list.sort(comparator); // ❌ 会抛 NullPointerException

✅ 解决方式

1️⃣ 给一个默认 Comparator(最常见)

list.sort(comparator != null ? comparator : Comparator.naturalOrder());

或:

Comparator<String> cmp = Optional.ofNullable(comparator)
        .orElse(Comparator.naturalOrder());
list.sort(cmp);

2️⃣ 用 Comparator.nullsFirst / nullsLast(防止元素为 null)

Comparator<String> safe = Comparator.nullsFirst(
        comparator != null ? comparator : Comparator.naturalOrder()
);
list.sort(safe);

二、被比较的对象为 null(不是 Comparator 为 null)

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));

三、方法参数允许传 null Comparator(比如你写工具方法)

public static <T> void sort(List<T> list, Comparator<T> cmp) {
    list.sort(cmp != null ? cmp : Comparator.naturalOrder());
}

四、Spring / 工具类里的 Comparator 为 null

如果你是:

  • Collections.sort(list, comparator)
  • Stream.sorted(comparator)

规则一样:

null Comparator 一定要兜底


✅ 总结一句话

Comparator 为 null 不要直接交给 sort,一定要先给默认值或兜底处理。

如果你能贴一段具体代码(哪一行报 null),我可以直接帮你改到可用版本。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI