在Java中创建比较器以传递给.sort()不合适的方法错误

时间:2018-10-18 14:34:56

标签: java sorting collections comparator comparable

我是编程新手。我正在执行此作业,因此我无法弄清楚为什么出现“没有合适的排序方法”错误。这是从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语句没有任何区别。虽然,我尝试编码解决方案,但错误仍然存​​在。

1 个答案:

答案 0 :(得分:3)

Collections.sort接受一个Comparator<T>作为第二个参数,您给它一个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*/));