在 Java 中,Comparator 报错的原因有很多,通常和泛型、方法签名、类型不匹配、JDK 版本有关。下面我按最常见原因 + 示例 + 解决办法给你梳理一下。
Comparator<String> c = (a, b) -> a.length() - b.length();
List<Integer> list = Arrays.asList(1, 2, 3);
list.sort(c); // 编译报错
Comparator<String> 只能用于 String,不能用于 Integer
Comparator<Integer> c = (a, b) -> a - b;
Comparator c = (a, b) -> a.compareTo(b); // 报错
没有泛型,a 和 b 被当成 Object,Object 没有 compareTo
Comparator<String> c = (a, b) -> a.compareTo(b);
或:
Comparator<String> c = String::compareTo;
Comparator<Integer> c = (a, b) -> {
return a > b; // 返回 boolean,错误
};
Comparator<Integer> c = (a, b) -> a - b;
或:
Comparator<Integer> c = (a, b) -> Integer.compare(a, b);
class MyComparator implements Comparator<String> {
public int compare(String a, String b) {
return 0;
}
public int compare(String a) { // 参数数量错误
return 0;
}
}
public int compare(String a, String b)
list.sort(Comparator.naturalOrder()); // 有 null 会 NPE
Comparator.nullsFirst(Comparator.naturalOrder());
// 1. Lambda
list.sort((a, b) -> a.compareTo(b));
// 2. 方法引用
list.sort(String::compareTo);
// 3. Comparator 工具类
list.sort(Comparator.comparing(String::length));
// 4. 倒序
list.sort(Comparator.comparing(String::length).reversed());
你可以直接把报错信息或代码贴出来,我可以精准告诉你哪一行、为什么错、怎么改。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。