在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;
}
}

我已经尝试过,而不是在可比之后写"字符串",而是键入"目录比较器",但它不起作用。我做错了什么? 总体目标是比较数组列表的元素,并使两位数的元素大于一位数的元素。我认为返回 -1 语句没有区别。虽然,我尝试编写解决方案,但错误仍然存在。

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

最新更新