Получить элемент из списка, который содержит другой список - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть эта конфигурация с java:

Student {
   private List<Note> notes;
}

Note {
   private int value;

   // Constructor - getters - setters
}

School {
   Private List<Student> students;

// Constructor - getters - setters
}

Я хочу следующее поведение:

Студенты:

S1 : note1(value=10), note2(value=16)

S2 : note1(value=7), note2(value=18), note3(value=2)

S3 : note1(value=19)

Я хочу управлять объектом со списком школ:

Manage {
   private List<School> schools;
}

И я хочу получить школу с учеником с более высокой отметкой.

В этом примере: результатом будет S3, потому что мы имеем один ученик с высшей нотой 19.

Как мне добиться такого поведения, используя Java Stream?

1 Ответ

1 голос
/ 21 февраля 2020

Вы можете создать Stream<Map.Entry<School,Student>> из всех пар School с и Student с, а затем найти запись, имеющую Student с максимальным значением.

Для этой цели я предлагаем добавить в класс Student метод getMaxValue(), который бы возвращал максимальное значение всех Student s Note s.

Optional<School> school =
    schools.stream()
           .flatMap(sc -> sc.getStudents()
                            .stream()
                            .map(st -> new SimpleEntry<>(sc,st)))
           .collect(Collectors.maxBy(Comparator.comparing(e -> e.getValue().getMaxValue())))
           .map(Map.Entry::getKey);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...