Создание нового компаратора для TreeSet в Java - PullRequest
0 голосов
/ 03 мая 2019

У меня есть пользовательский класс с именем User. Этот класс реализует сопоставимые и имеет идентификационный номер поля данных, подписчиков и следующие.

Я хочу отсортировать элементы TreeSet таким образом, чтобы пользователь с наибольшим количеством подписчиков был первым, а пользователь с наименьшим количеством подписчиков - последним. Если у обоих пользователей одинаковое количество подписчиков, сортируйте их по количеству подписчиков. Если они следуют одному и тому же количеству людей, сортируйте их по идентификационному номеру.

class User implements Comparable<User>
{
    private int userId;
    private ArrayList<User> following;
    private ArrayList<User> followers;
    Set<User> sortingSet = new TreeSet<User>();
}

Я также реализовал метод сравнения

public int compareTo(User other)
{
    if(this.followers.size() > other.followers.size())
        return -1;

    if(this.followers.size() < other.followers.size())
        return 1;

    if(this.following.size() > other.following.size())
        return -1;

    if(this.following.size() < other.following.size())
        return 1;

    if(this.userId < other.userId)
        return -1;

    if(this.userId > other.userId)
        return 1;

    return 0;
}

Когда я добавляю в TreeSet, он просто сортируется на основе идентификатора пользователя.

РЕДАКТИРОВАТЬ: Спасибо за помощь, я сделал некоторые изменения в коде до сих пор. Я удалил некоторые лишние операторы if. Я также реализовал метод CompareTo, но проблема остается той же. Я также уже написал методы equals () и hashcode ().

EDIT2: Еще раз спасибо всем за помощь. Я выяснил проблему, и это связано с тем, как я инициализировал подписчиков и следовал за ArrayLists. Я обвиняю эту ошибку в недостатке сна.

1 Ответ

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

Вы не создали компаратор.Вы создали вещь под названием Comp, которую можно сравнить с пользователями .

Сравнение ator - это то, что сравнивает две вещи ,Compar способны - это то, что может сравнивать себя с чем-то.

Comparable.compareTo принимает один аргумент.Comparator.compare принимает два аргумента.

...