创建比较器以传递给 .sort() in java not suitable method 错误
Creating a comparator to pass to .sort() in java not suitable method error
我对编程还很陌生。我正在做这项作业,但我无法弄清楚为什么会出现 "no suitable method for 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
接受一个 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*/));
我对编程还很陌生。我正在做这项作业,但我无法弄清楚为什么会出现 "no suitable method for 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
接受一个 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*/));