Я изучаю потоки Java 8 и пытаюсь реорганизовать метод.
Допустим, у меня есть класс School и school map
, в котором все школьные объекты хранятся по Id.Каждый школьный объект содержит student map
, в котором хранится группа учеников.
В этом сценарии идентификаторы учеников уникальны во всех школах.
У меня есть функция, позволяющая извлекать учеников по идентификатору во всех школах.
public Student getStudent(Map<String, School> schoolMap, String studentId) {
return schoolMap.values().stream()
.map(School::getStudentIdToStudentMap)
.filter(map -> map.containsKey(studentId))
.map(map -> map.get(studentId))
.findAny().get();
}
СейчасЯ хочу изменить функцию на использование schoolId
в качестве фильтра, если он доступен.
public Student getStudent(Map<String, School> schoolMap,
String schoolId /* can be null */,
String studentId)
{
// TODO: Something that I have tried
return schoolMap.get(schoolId)
.getStudentIdToStudentMap()
.get(studentId);
}
Есть ли хороший способ объединить эти две функции?Если schoolId
пусто, отведите ученика из всех школ.Еще просто поискать в конкретной школе и забрать ученика?