Как сделать этот код с помощью Comparator? - PullRequest
2 голосов
/ 03 мая 2011

Извините, я давно не работаю с Java.У меня есть класс, который сортирует тип int, и я пытаюсь это сделать, но это не компилируется:


MySort.sort(vectorOfInt, new Comparator() {
    @Override
    public int compare(Object o1, Object o2) {
    return (int)o1 - (int)o2;
    }
    });

Я хотел бы отсортировать вектор int с помощью этого метода с использованием компаратора для сортировки впо возрастанию.


public static  void sort(T[] a, Comparator c) {
        sort(a, 0, a.length, c);
}

Ответы [ 3 ]

3 голосов
/ 03 мая 2011

Пример кода довольно неполный, но для начала вы не можете привести Object к int. Используйте

return (Integer) o1 - (Integer) o2;

вместо.

1 голос
/ 03 мая 2011

Прежде всего, не используйте Vector или Hashtable в этом отношении, они оба считаются deprecated для всех практических целей.Используйте List или Map реализации.

Используйте взамен List<Integer>, это современный и правильный способ манипулировать списком Integer s как объектами.

final List<Integer> list = new ArrayList<Integer>();
... populate list ...
Collections.sort(list);

Если вы хотите использовать другой Comparator, тогда вы можете использовать:

Collections.sort(list, comparator);

Поскольку Integer реализует Comparable, по умолчанию будет отсортирована List<Integer> в порядке возрастания. Integer для деталей.

Это правильный идиоматический способ сортировки List и Collection классов в современной Java.Что-нибудь еще показывает, что вы не понимаете язык и что он дает.

1 голос
/ 03 мая 2011

Вы можете создать типизированный компаратор , и вам не нужно приводить аргументы.

MySort.sort(vectorOfInt, new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
      return o1 - o2;
    }
    });

РЕДАКТИРОВАТЬ:
Прежде всего, пожалуйстане называйте массив вектором.Vector - это класс Java, и люди будут предполагать, что это то, что вы используете, когда называете переменную vectorOfInt.

Ошибка компилятора, которую вы получаете, заключается в том, что компилятор не 'Не знаю, что ваш Comparator работает на Integer с.Поскольку все, что он видит, это Object, он не знает, что o1 на самом деле Integer и может быть распакован, чтобы быть int.Указав тип компаратора, вы предоставите больше информации, и преобразование может быть выполнено неявно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...