Kotlin: создать список всех дат из внутренних классов для l oop. найти последнюю дату из списка дат - PullRequest
0 голосов
/ 29 апреля 2020

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

data class College(
    val id: Int,
    val isOpen: Boolean,
    val classes: List<Class>?
)

data class Class(
    val id: Int,
    val name: String,
    val students: List<Student>?
)

data class Student(
    val id: Int,
    val name: String?,
    val admissionDate: Date,
    val birthDate: Date
)

Я хочу создать список всех admissionDate, чтобы найти последнюю дату admissionDate из списка.

Как я должен создать список admissionDate из вышеупомянутых классов данных. У меня есть 1 колледж -> 2 класса -> 2 ученика в каждом классе -> у каждого ученика есть admissionDate

Наконец, Вновь созданный список будет содержать всего 4 объекта даты и найдет самую раннюю дату из списка.

1 Ответ

1 голос
/ 29 апреля 2020

Дата в основном устарела. Вы должны переключиться на что-то вроде 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...