Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中创建要传递给.sort()的比较器不适合方法错误_Java_Sorting_Collections_Comparator_Comparable - Fatal编程技术网

在java中创建要传递给.sort()的比较器不适合方法错误

在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

我对编程相当陌生。我正在做这个作业,我不明白为什么会出现“没有合适的排序方法”错误。这是从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());
    }
}
公共类目录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()方法的。你认为我应该实现比较器接口吗?