Ответ 1
Вы можете просто отменить 2 "операнды" метода equals
:
"In Progress".equalsIgnoreCase(t.getStatus())
Таким образом, поскольку "In Progress"
никогда не может быть нулевым, не будет NPE!
У меня есть объект Person
, который имеет два свойства Name
и Status
. Из списка объектов я надеюсь отфильтровать объекты Person
со статусом In Progress
. Вот мой код:
personList.stream().filter(
t -> t.getStatus().equalsIgnoreCase(
"In Progress")).collect(Collectors.toList());
Но код бросает ошибку nullpointerexception
. Когда я проверил, я увидел, что несколько объектов с статусом In Progress
имеют нулевые значения. Как мы справляемся с этим в лямбда?
Вы можете просто отменить 2 "операнды" метода equals
:
"In Progress".equalsIgnoreCase(t.getStatus())
Таким образом, поскольку "In Progress"
никогда не может быть нулевым, не будет NPE!
Попробуйте отфильтровать объекты с нулевыми статусами
personList
.stream()
.filter(t -> t.getStatus() != null)
.filter(t -> t.getStatus().equalsIgnoreCase("In Progress"))
.collect(Collectors.toList());
Вы можете связать/объединить условия filter
для работы с ненулевыми значениями с закодированными условиями как:
personList.stream()
.filter(t -> t.getStatus() != null && t.getStatus().equalsIgnoreCase("In Progress"))
.collect(Collectors.toList());
Предполагая, что для status = null
вы его не выберете. Затем вы можете использовать "In Progress".equalsIgnoreCase(t.getStatus())
, чтобы избежать любого возможного значения null
в вашем статусе.
В целом,
personList.stream()
.filter(t -> "In Progress".equalsIgnoreCase(t.getStatus()))
.collect(Collectors.toList());