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