Какую коллекцию применить?

134
27 февраля 2022, 09:10

Например, мы имеем следующий класс:

public class Person{
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public User(String phone) {
        this.phone = phone;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

И мне необходимо их отсортировать по имени и возрасту. Например: если будут (Andrey, 24) и (Vlad, 13) вывести Andrey и 13 соответственно по алфавиту и номеру возрастания. Какую коллекцию мне использовать? При использовании TreeSet выдает ошибку Comporable.

Answer 1

Достаточно засунуть ф-ю с сигнатурой int compareTo(T t1, T t2) в конструктор(Пример сортировки по имени и возрасту):

TreeSet<User> treeSet = new TreeSet<User>((User a, User b) -> {
        int compareResult = a.getName().compareTo(b.getName());
        return compareResult == 0 ? a.getAge() - b.getAge() : compareResult;
    });

Также можно использовать другие коллекции - любые коллекции, реализующие интерфейс List, если вам не нужно, чтобы коллекция всегда была отсортирована(Например, ArrayList):

List<User> arrayList = new ArrayList();
arrayList.sort((User a, User b) -> {
        int compareResult = a.getName().compareTo(b.getName());
        return compareResult == 0 ? a.getAge() - b.getAge() : compareResult;
    });

А если хочется эти два примера, но покороче:

TreeSet<User> treeSet = new TreeSet<User>(Comparator.comparing(User::getName).thenComparing(Comparator.comparing(User::getAge)));
arrayList.sort(Comparator.comparing(User::getName).thenComparing(Comparator.comparing(User::getAge)));
READ ALSO
This application has no explicit mapping for /error, so you are seeing this as a fallback

This application has no explicit mapping for /error, so you are seeing this as a fallback

При запуске проекта на Java, с использованием Spring появляется ошибка: "This application has no explicit mapping for /error, so you are seeing this as a fallback" Данное приложение представляет...

220
Какие есть альтернативы TreeSet

Какие есть альтернативы TreeSet

Решил задачу, но как я понял просто TreeSet без лишних методов для сортировки классов не годитсяВыдает ошибку: cannot be cast to class java

163
Factory method - Фабричный метод

Factory method - Фабричный метод

Зачем нужен фабричный метод?

109
добавлять значения в firebase database сверху

добавлять значения в firebase database сверху

Весь цикл записи и чтения работает на ура, но новые значения появляются снизу БД:

204