как сделать список дубликатов в произвольном массиве Java - PullRequest
0 голосов
/ 08 января 2020

У меня есть список собак с их именем, породой, возрастом, весом и длиной хвоста. Я уже отсортировал список по длине хвоста и теперь должен сортировать собак с одинаковой длиной по имени. Например, вот как должен выглядеть список:

Charlie  Golden   2years 3kg 2.0cm

Bob      Bulldog  3years 4kg 3.3cm

Lucy     Golden   4years 3kg 3.3cm 

Molly    Bulldog  5years 7kg 5.2cm

У меня есть метод с именем sortTail(), который сортирует по длине хвоста, и метод sortName(), который сортирует по имени.

sortTail()

ArrayList<Dog> dogs = new ArrayList<>();

sortName()

Что мне делать между тем, чтобы сортировать только те, у которых одинаковая длина хвоста?

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Если ваши Dog экземпляры находятся в List, ваша лучшая ставка для сортировки - это использование Java 'Comparator класса с List#sort . Вы можете использовать методы по умолчанию Comparator, чтобы создать компаратор по нескольким критериям. Например, следующий код отсортирует собак по длине хвоста, а затем по названию для собак с одинаковой длиной хвоста:

List<Dog> dogs = // ...
dogs.sort(
    Comparator.comparing(Dog::getTailLength)
              .thenComparing(Dog::getName));
0 голосов
/ 08 января 2020

На всякий случай, если вы хотите реализовать свой собственный компаратор или ваша задача требует этого. Однако ответ SDJ должен быть предпочтительнее изобретения велосипеда:

Comparator<Dog> dogComparator = 
    (a,b) -> {
        if (a.getTailLength() == b.getTailLength()) 
            return a.getName().compareTo(b.getName());
        else 
            return 0;
    }


Collections.sort(dogs, dogComparator);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...