Подтвердить что ты не робот

Исключение в Java для нулевых значений в лямбда-выражении при фильтрации

У меня есть объект Person, который имеет два свойства Name и Status. Из списка объектов я надеюсь отфильтровать объекты Person со статусом In Progress. Вот мой код:

personList.stream().filter(
    t -> t.getStatus().equalsIgnoreCase(
        "In Progress")).collect(Collectors.toList());

Но код бросает ошибку nullpointerexception. Когда я проверил, я увидел, что несколько объектов с статусом In Progress имеют нулевые значения. Как мы справляемся с этим в лямбда?

4b9b3361

Ответ 1

Вы можете просто отменить 2 "операнды" метода equals:

"In Progress".equalsIgnoreCase(t.getStatus())

Таким образом, поскольку "In Progress" никогда не может быть нулевым, не будет NPE!

Ответ 2

Попробуйте отфильтровать объекты с нулевыми статусами

personList
  .stream()
  .filter(t -> t.getStatus() != null)
  .filter(t -> t.getStatus().equalsIgnoreCase("In Progress"))
  .collect(Collectors.toList());

Ответ 3

Вы можете связать/объединить условия filter для работы с ненулевыми значениями с закодированными условиями как:

personList.stream()
          .filter(t -> t.getStatus() != null && t.getStatus().equalsIgnoreCase("In Progress"))
          .collect(Collectors.toList());

Ответ 4

Предполагая, что для status = null вы его не выберете. Затем вы можете использовать "In Progress".equalsIgnoreCase(t.getStatus()), чтобы избежать любого возможного значения null в вашем статусе.

В целом,

personList.stream()
    .filter(t -> "In Progress".equalsIgnoreCase(t.getStatus()))
    .collect(Collectors.toList());