#java #comparator
#java #компаратор
Вопрос:
Я пытался отсортировать ArrayList<E>
с помощью пользовательского компаратора, показанного ниже
@Override
public int compare(Dog d1, Dog d2){
return Integer.compare(d1.tired, d2.tired);
};
Теперь это все, что я хочу начать работать, прежде чем двигаться дальше:
public static <E> ArrayList<E> listBiggest(ArrayList<E> list) {
Dog dogcomparator = new Dog();
Collections.sort(list, dogcomparator);
}
Хотя я не могу отсортировать список, потому что, по-видимому, в списке нет объектов, соответствующих типу компаратора, хотя в списке есть все объекты этого типа или объекты, которые его расширяют.
Я не уверен, что я делаю неправильно.
Ошибка, которую я получаю, это
Error:(15, 20) java: no suitable method found for sort(java.util.ArrayList<E>,Dog)
method java.util.Collections.<T>sort(java.util.List<T>) is not applicable
(cannot infer type-variable(s) T
(actual and formal argument lists differ in length))
method java.util.Collections.<T>sort(java.util.List<T>,java.util.Comparator<? super T>) is not applicable
(inference variable T has incompatible bounds
equality constraints: E
lower bounds: Dog,java.lang.Object)
Я упускаю что-то фундаментальное, о чем я не знаю? Достаточно ли вообще информации, чтобы понять суть того, что я пытаюсь спросить?
Комментарии:
1. Вы путаете comparator с comparable ? Вкл
Dog dogcomparator = new Dog();
. , это не компаратор dog, это просто Dog .2. Какую ошибку вы получаете? Есть ли трассировка стека? Если нет, покажите с помощью ввода и вывода, что вы ожидаете и что получаете.
3. @Vitruvius У меня есть метод сравнения как часть моего класса Dog. Я предполагаю, что объект dog будет использовать его компаратор.
4. @AbhijitSarkar Я включил ошибку, которую я получил. Я ожидаю, что мой ArrayList<E> будет отсортирован с помощью созданного мной компаратора
Ответ №1:
У вас есть a List<E>
, который вы хотите отсортировать с помощью a Comparator<Dog>
. Компилятор не знает, что это E
; все, что он знает, E
может быть a Person
. Если вы уверены, что это список dogs, приведите его.
Комментарии:
1. Хорошо, это имеет большой смысл, почему это не работает. Теперь, есть ли способ, которым я могу это сделать, прежде чем пытаться отсортировать список, чтобы я мог сохранить общий список до вызова этого конкретного метода?
2. @Yalnix я не уверен, о чем ты спрашиваешь. Я предлагаю вам приостановить копирование кода, который вы нашли в Интернете, и взять книгу по Java.
Ответ №2:
Измените сигнатуру метода. Если все, что там требуется, должно быть каким Dog
-то, тогда объявите это.
public static <E extends Dog> List<E> listBiggest(List<E> list) {
Лучше объявить List
(интерфейс, который ArrayList
реализует) так Collections.sort
же, как и это. Это позволит использовать метод для любого списка, а не только для одной конкретной реализации.
Вам также нужно будет добавить a return
к методу или задать возвращаемый тип void
метода.
Комментарии:
1. В первую очередь этот метод не нужен, но это другой вопрос.