在java中创建要传递给.sort()的比较器不适合方法错误
我对编程相当陌生。我正在做这个作业,我不明白为什么会出现“没有合适的排序方法”错误。这是从DirectorySortDemo进行排序的调用:在java中创建要传递给.sort()的比较器不适合方法错误,java,sorting,collections,comparator,comparable,Java,Sorting,Collections,Comparator,Comparable,我对编程相当陌生。我正在做这个作业,我不明白为什么会出现“没有合适的排序方法”错误。这是从DirectorySortDemo进行排序的调用: public class DirectorySortDemo{ public static void main(String[] args){ String dirNames = {"dir12", "dir1", "dir11", "dir10", "dir2"}; ArrayList<String> directorie
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());
}
}
公共类目录SORTDEMO{
公共静态void main(字符串[]args){
字符串dirNames={“dir12”、“dir1”、“dir11”、“dir10”、“dir2”};
ArrayList目录=新的ArrayList(Arrays.asList(dirNames));
排序(目录,新的DirectoryComparator());
}
}
这是比较标准:
public class DirectoryComparator implements Comparable<String> {
@Override
public int compareTo(String o) {
return -1;
}
}
公共类DirectoryComparator实现了可比较的{
@凌驾
公共整数比较(字符串o){
返回-1;
}
}
我尝试过在Comparable之后输入“DirectoryComparator”,而不是写“String”,但没有成功。我做错了什么?
总体目标是比较数组列表中的元素,并使其成为两位数的元素大于一位数的元素。我认为return-1语句没有什么区别。尽管我尝试编写了一个解决方案,但错误仍然存在。
Collections.sort
接受一个比较器作为第二个参数,您给它一个Comparable
。这就是为什么会弹出错误
即使Collections.sort
接受了可比的
,您的实现也违反了可比的
的一般合同
您似乎只想按相反的顺序对字符串排序。你可以这样做:
Collections.sort(directories, Comparator.reverseOrder());
Collections.sort(directories, Comparator.comparing(s -> /*map the string to something you want to compare*/));
如果我误解了您的意思,您实际上希望以某种自定义方式对其进行排序,您可以执行以下操作:
Collections.sort(directories, Comparator.reverseOrder());
Collections.sort(directories, Comparator.comparing(s -> /*map the string to something you want to compare*/));
Collections.sort
接受一个Comparator
作为第二个参数,您给它一个Comparable
。这就是为什么会弹出错误
即使Collections.sort
接受了可比的
,您的实现也违反了可比的
的一般合同
您似乎只想按相反的顺序对字符串排序。你可以这样做:
Collections.sort(directories, Comparator.reverseOrder());
Collections.sort(directories, Comparator.comparing(s -> /*map the string to something you want to compare*/));
如果我误解了您的意思,您实际上希望以某种自定义方式对其进行排序,您可以执行以下操作:
Collections.sort(directories, Comparator.reverseOrder());
Collections.sort(directories, Comparator.comparing(s -> /*map the string to something you want to compare*/));
你对这个概念有很多误解。您应该研究Comparator
和Comparable
之间的差异,以及为什么不应该总是返回-1
@zron,因为您是对的。我刚学会这个概念,在课堂上没有很好的解释。我正在研究,我发现它们都是接口。我以为比较器就是传递给sort()方法的。你认为我应该实现比较器接口吗?你对这个概念有很多误解。您应该研究Comparator
和Comparable
之间的差异,以及为什么不应该总是返回-1
@zron,因为您是对的。我刚学会这个概念,在课堂上没有很好的解释。我正在研究,我发现它们都是接口。我以为比较器就是传递给sort()方法的。你认为我应该实现比较器接口吗?