Java 中在筛选时 lambda 表达式中的空值的异常

2022-09-02 02:09:06

我有一个对象,它有两个属性和。我希望从对象列表中过滤掉状态为 .这是我的代码:PersonNameStatusPersonIn Progress

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

但是代码会引发错误。当我检查时,我看到一些具有状态的对象具有空值。我们如何在 lambda 中处理这个问题?nullpointerexceptionIn Progress


答案 1

您可以反转该方法的2个“操作数”:equals

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

这样,由于永远不会为空,因此不会有NPE!"In Progress"


答案 2

尝试过滤掉状态为空的对象

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

推荐