首页 > 解决方案 > 在 java 中创建一个比较器以传递给 .sort() 不合适的方法错误

问题描述

我对编程相当陌生。我正在做这个作业,但我无法弄清楚为什么我会收到“没有合适的排序方法”错误。这是从 DirectorySortDemo 进行排序的调用:

public class DirectorySortDemo{
  public static void main(String[] args){
    String dirNames = {"dir12", "dir1", "dir11", "dir10", "dir2"};
    ArrayList<String> directories = new ArrayList<>(Arrays.asList(dirNames));
    Collections.sort(directories, new DirectoryComparator());
    }
}

这是比较器:

public class DirectoryComparator implements Comparable<String> {
   @Override
   public int compareTo(String o) {
     return -1;
   }
}

我试过,而不是在 Comparable 之后写“String”,而是输入“DirectoryComparator”,但它没有用。我究竟做错了什么?总体目标是比较数组列表的元素并使其具有两位数的元素大于一位数的元素。我认为 return -1 语句没有任何区别。虽然,我尝试编写解决方案,但错误仍然存​​在。

标签: javasortingcollectionscomparatorcomparable

解决方案


Collections.sort接受 aComparator<T>作为第二个参数,你给它 a Comparable<T>。这就是弹出错误的原因。

即使Collections.sort确实接受了Comparable<T>,你的实施也违反了一般合同Comparable

您似乎只想以相反的顺序对字符串进行排序。你可以这样做:

Collections.sort(directories, Comparator.reverseOrder());

如果我误解了您,而您实际上想以某种自定义方式对其进行排序,则可以执行以下操作:

Collections.sort(directories, Comparator.comparing(s -> /*map the string to something you want to compare*/));

推荐阅读