Java排序自定义Pair类时出现compareTo找不到符号错误如何解决
错误根因
- 泛型类型擦除:声明Comparator时使用了无泛型参数的原生
Pair类型,编译器会将所有泛型返回值视为Object类型,Object类未实现compareTo方法,因此触发方法找不到的编译错误。 - 排序API误用:
Arrays.sort()仅支持数组排序,pairList是List集合类型,需要使用适配集合的排序API。 - 排序字段不匹配:需求为按第四个元素(对应Pair类的
s字段)排序,当前代码错误选取了第一个字段l作为排序依据。
修复代码
写法1(兼容Java 8之前版本)
// 改用Collections.sort对List排序,Comparator指定完整泛型参数 Collections.sort(pairList, new Comparator<Pair<String, Integer, Integer, Integer>>() { @Override public int compare(Pair<String, Integer, Integer, Integer> p1, Pair<String, Integer, Integer, Integer> p2) { // 调用getS获取第四个元素比较,Integer已经实现了compareTo方法 return p1.getS().compareTo(p2.getS()); } });
写法2(Java 8+ lambda简化写法)
pairList.sort(Comparator.comparing(Pair::getS));
排序后直接遍历pairList即可得到你预期的升序结果。
内容的提问来源于stack exchange,提问作者Ankita Jain
相关产品推荐
相关产品推荐

