Создание компаратора для передачи в .sort () в Java не подходит метод ошибки - PullRequest
0 голосов
/ 18 октября 2018

Я довольно новичок в программировании.Я делаю это назначение, и я не могу понять, почему я получаю ошибку «нет подходящего метода для сортировки».Это вызов для сортировки из 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;
   }
}

Я попытался вместо того, чтобы написать «String» после Comparable, набрав «DirectoryComparator»,но это не сработало.Что я делаю неправильно?Общая цель состоит в том, чтобы сравнить элементы списка массивов и сделать так, чтобы элементы с двумя цифрами были больше, чем элементы с одной цифрой.Я думаю, что оператор возврата -1 не имеет значения.Хотя я попытался написать решение, и ошибка все еще остается.

1 Ответ

0 голосов
/ 18 октября 2018

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*/));
...