java - 在 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 语句没有任何区别。虽然,我尝试编写解决方案,但错误仍然存在。
解决方案
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*/));
推荐阅读
- python-3.x - Python 取消导入模块
- android - Firebase RecyclerView 中的 SearchView
- c# - 如何处理 System.Runtime.InteropServices.COMException (0x800706BA):RPC 服务器不可用。(来自 HRESULT 的异常:0x800706BA)
- java - 所有功能文件均未执行
- javascript - 如何仅使用 Nodejs 和 Express 通过 API 将数据发送到其他服务器?
- c - 4 字节字符数组到一个整数,用于 C 中的 `case` 语句
- c# - 从图像中找到线中的角落
- reactjs - React-Calendar 不显示事件
- python - pandas 基于其他两个具有日期时间值的列创建一个布尔列
- linux - 如何在目录中的文件上运行命令递归地在每个被访问的目录中创建一个新文件(Bash)?