Дата в основном устарела. Вы должны переключиться на что-то вроде LocalDate. Но следующее должно работать даже после того, как вы переключитесь на другой тип даты класса.
Я также рекомендую не использовать Class
в качестве имени класса, потому что Class
уже является стандартной библиотекой Java класса. Вероятность возникновения трудностей при работе с ним высока.
Вы хотите использовать flatMap
для создания списка содержимого списков в каждом классе. Но сначала используйте .orEmpty()
, чтобы вам не пришлось иметь дело с его обнуляемостью.
Вы также можете использовать orEmpty()
во внутреннем списке студентов по той же причине.
Затем сопоставьте студентов к их датам поступления, чтобы преобразовать список студентов в список дат приема.
Затем вы можете позвонить min()
в списке, чтобы получить самую раннюю дату (поскольку даты сопоставимы).
val dates = college.classes.orEmpty()
.flatMap { it.students.orEmpty() }
.map { it.admissionDate }
val earliestDate = dates.min()
Редактировать: В Java:
List<LocalDate> dates = Optional.ofNullable(college.getClasses()).orElse(Collections.emptyList())
.stream()
.flatMap(cls -> Optional.ofNullable(cls.getStudents()).orElse(Collections.emptyList()).stream())
.map(Student::getAdmissionDate)
.collect(Collectors.toList());
LocalDate earliestDate = dates.stream().min(Comparator.naturalOrder()).orElse(null);