Сортировать родительский список JAVA на основе внутреннего списка дат - PullRequest
0 голосов
/ 02 июля 2019

У меня есть класс, который я хочу отсортировать на основе списка дат внутри другого дочернего объекта в этом классе.

Модель:

Student {

    String name;

    List<Action> actions;

}

Action {

    String type;
    Date lastActionDate;

}

Итак, теперь у меня есть список, который я хочу отсортировать, чтобы на первом месте было действие, выполняющее последних учеников.

Я пробовал:

public Date getLatestActionDate() {
        return actions.stream().map(a -> a.lastActionDate).min(Date::compareTo).get();
    }

    @Override
    public int compareTo(Student o) {
        return getLatestActionDate().compareTo(o.getLatestActionDate());
    }

Но не помогает.С нетерпением жду удивительных ответов.

Я ожидаю отсортированный список студентов.

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

ИСПРАВЛЕНО:

Для родительского класса:

Collections.sort(students, (o1, o2) -> o2.getActions().get(0).getLastActionDate().compareTo(o1.getActions().get(0).getLastActionDate()));

В дочернем классе Action обновите получатель getActions () следующим образом:

public List<Actions> getActions() {
        Collections.sort(actions, (o1, o2) -> o2.getLastActionDate().compareTo(o1.getLastActionDate()));
        return actions;
    }

Итак, сначала мы сортируем внутренние объекты, имеющие объект date, а затем в parent, получаем первый get (0) объект и сортируем родительский объект против него.

Я надеюсь, что это поможет кому-то в будущем.

0 голосов
/ 02 июля 2019

Вы можете использовать метод getLatestActionDate, который вы создали в Comparator, и отсортировать список следующим образом:

students.sort(Comparator.comparing(student -> getLatestActionDate(student.getActions())))
...