Могу ли я иметь ArrayList и Comparator в конструкторе TreeSet? - PullRequest
0 голосов

Предположим, у меня есть класс Pet с атрибутами name (String) и age (int) в ArrayList, и я хочу отсортировать их без использования Collections Framework, поэтому я использую TreeSet для анализа ArrayList.Мой вопрос, есть ли способ инициализации нового компаратора внутри конструктора TreeSet (наряду с ArrayList) или мне нужно реализовать новый компаратор / Comparable в классе Pet?

Уже попробовал это, реализовав Comparable в классе Pet, и это сработало, но мне было интересно узнать, есть ли более короткий путь с использованием конструктора TreeSet.

ArrayList<Pet> myPets = new ArrayList<>();

// TreeSet to compare names
TreeSet<Pet> sortedPets = new TreeSet(myPets, new Comparator<Pet>() {                                         
    public int compare(Pet p1, Pet p2) {
        return p1.getName().compareTo(p2.getName());
    }
});

1 Ответ

0 голосов
/ 13 января 2019

Не существует конструктора TreeSet, который принимает как Comparator, так и Collection, но вы можете создать TreeSet с Comparator, а затем заполнить его addAll:

TreeSet<Pet> sortedPets = new TreeSet(new Comparator<Pet>() {                                         
    public int compare(Pet p1, Pet p2) {
        return p1.getName().compareTo(p2.getName());
    }
});
sortedPets.addAll(myPets);

Реализация Comparable в классе Pet будет иметь смысл, только если вы считаете, что упорядочение Pet s по их именам является естественным упорядочением Pet s.

...