Java не будет сортировать массив абстрактных классов - PullRequest
0 голосов
/ 05 июня 2018

У меня проблема. Я пишу простой абстрактный класс и пытаюсь отсортировать список массивов этого класса, и я реализовал интерфейс Comparator для функции CompareTo, но List.sort выдает ошибку. Пожалуйста, помогите. Вот код:

public abstract class Antena implements Comparator<Antena>{
    private double x, y;

    public Antena(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public double getX() {
        return x;
    }

    public double getY() {
        return y;
    }

    @Override
    public int compare(Antena o1, Antena o2) {
        return (int)(o1.getX()-o2.getX());
    }
}

В основном классе у меня есть:

List<Antena> anteneObj=new ArrayList<>();
anteneObj.add(.....);
....
....
Collections.sort(anteneObj);

Это дает мне ошибку и не сортирует список. В чем проблема? Должен ли я расширять или реализовывать что-то в расширенных классах.Конечно, у меня есть 2 класса, которые расширяют абстрактный класс Antena.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

compare метод должен возвращать -1 или 0 или 1. Ваша реализация может возвращать неправильные значения.Реализуйте Comparable и верните Double.compare(double, double).

0 голосов
/ 05 июня 2018

В кавычках от Collections.sort(List<T>):

Сортирует указанный список в порядке возрастания в соответствии с естественным порядком Comparable его элементов.Все элементы в списке должны реализовывать интерфейс Comparable.

Таким образом, для сортировки по Collections.sort(List<T>) ваш класс Antena должен реализовывать интерфейс Comparable<Antena> вместо Comparator<Antena>:

public abstract class Antena implements Comparable<Antena> {

    ....

    @Override
    public int compareTo(Antena o) {
        return Double.compare(this.getX(), o.getX());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...