Мне любопытно посмотреть, выдает ли ваш код NullPointerException
во время выполнения. Вы передаете свою коллекцию employees
, а затем коллекцию students
в объекте Employee
.
Если ваш родительский объект, Employee
, является нулевым значением, вы не можете иметь коллекцию student
для этого объекта, как указано в вашем внутреннем потоке.
Попробуйте ввести:
.map(employee -> Optional.ofNullable(employee)
.filter(Optional::isPresent)
.map(Optional::get)
перед вашим фильтром. Это исключит любые нулевые родительские объекты.
Для вашего внутреннего потока вы по-прежнему обеспокоены тем, что ваш элемент student
будет нулевым, поэтому повторите эти строки перед вызовом .anyMatch
.
Для удобства чтения я бы рассмотрел возможность извлечения ваших нулевых проверок в меньшие методы, которые описывают, какие проверки выполняются. Например, у вас есть строка:
employee.getName().equals(student.getName()
, которая предполагает, что вы ищете элементы ученика, в которых имена сотрудников и учеников совпадают. employeeAndStudentNamesMatch(employee, student)
здесь будет достаточно.
Для проверки нулевых значений вы действительно должны использовать Optional
API. Это дает вам возможность обернуть что-то, что является потенциально нулевым, в безопасную оболочку, чтобы проверить, есть ли там значение или нет. Извлекая пример из вашего внутреннего потока, в котором вы проверяете наличие имени студента, вы можете заменить его следующим:
Optional.ofNullable(student.getName()).isPresent();
Это все советы, которые я действительно могу предложить. Надеюсь, это поможет вам прогрессировать.