Как избежать нулевых значений в потоке - PullRequest
0 голосов
/ 20 октября 2019

Мы находимся в случае, когда у нас есть поврежденные данные X в списке, и где наличие этих поврежденных данных X препятствует работе с данными Y того же типа, что и X. Это не нормально, и мы должны экранировать код, чтобы присутствие поврежденных данных X не блокировало использование других допустимых данных.

Я использовал Optional с фильтром операций, для фильтра, если имяnull, мы пропускаем.

     Personne personne = null;
     String name= personne.getName();
     try {
        Optional<Personne> abstractPersonne= 
      APIPersonne.getAllPersonne(currentPersonne.getMethod())
                                                            .stream()
                                                            .filter(e -> e.getName() != null && e.getName().equals(name))
                                                            .findAny();
  if (abstractPersonne.isPresent())
    personne= abstractPersonne.get();
}

Есть ли способ избежать проверки (e-> e.getName! = null)?

Ответы [ 3 ]

3 голосов
/ 20 октября 2019

Просто измените условие, если вы уверены, что переменная "name" является нулевой. Например, вместо

e.getName().equals(name)

используйте

name.equals(e.getName())
2 голосов
/ 20 октября 2019

Инвертировать условие: name.equals(e.getName())

.filter(e -> name.equals(e.getName()))
0 голосов
/ 20 октября 2019

Вы можете проверить с помощью Optional.ofNullable ( T ) вот так

  • проверить, что значение не равно нулю
  • с вашей строкой (значение списка и желаемая строка равны или нет)
Optional<Personne> abstractPersonne = APIPersonne
                    .getAllPersonne(currentPersonne.getMethod())
                    .stream()
                    .filter(e -> Optional.ofNullable(e).isPresent()  && e.getName().equals(name))
                    .findAny();
            if (abstractPersonne.isPresent())
                personne= abstractPersonne.get();
...