java проверка нулевого потока - PullRequest
0 голосов
/ 02 февраля 2020

Как лучше проверить нулевые значения внутри потока

List<Employee> employees1= employees.stream().filter(
                    employee -> students.stream()
                        .anyMatch(student ->
                               // checking null
                                employee!=null && student!=null &&
                                employee.getId()!=null && student.getName()!=null &&
                                employee.getId()==student.getId() &&
                                employee.getName().equals(student.getName()))
                )
                .collect(Collectors.toList());

1 Ответ

0 голосов
/ 19 марта 2020

Мне любопытно посмотреть, выдает ли ваш код 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();

Это все советы, которые я действительно могу предложить. Надеюсь, это поможет вам прогрессировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...