Для этого примера с игрушками у меня есть список классных комнат с идентификатором и именем. Я беру эти классные комнаты из источника данных, а затем, для каждого класса, мне потребуются ученики и списки учителей. Затем я хотел бы создать еще один объект, который принимает classroom.id, classroom.name и List<Student>, List<Teacher>
под названием Foo. Проблема заключается в том, что Foo является неизменным объектом и должен быть создан, когда доступна вся информация. Вот что я пробовал:Эффективное построение связанной иерархии объектов
List<Classroom> classrooms = dataSource.fetchClassroomsById(classroomIds);
Map<Integer, Classroom> idToClassroom = new HashMap<>();
classrooms.stream()
.forEach(classroom -> {idToClassroom.put(classroom.getId(), classroom);});
//get all students and teachers that belong to set of classroomIds passed in
List<Student> students = dataSource.fetchStudentsById(classroomIds);
List<Teacher> teachers = dataSource.fetchTeachersById(classroomIds);
for (Student student : students) {
//gets the classroom for which student belongs. This is where I get stuck.
idsToClassroom.get(student.getClassRoomId())
}
...
В принципе, как я могу построить свой объект Foo эффективно и компактно в этот момент?
Что такое 'datasource'? можете ли вы изменить код 'datasource'? – sidgate
@sidgate нет своего рода абстракция здесь. Предположим, он не может быть изменен или искажен. Он предоставляется как-есть –
хмм .. Я думал об обновлении 'fetchStudentsById', чтобы вернуть Map>, чтобы упростить –
sidgate