Java中的异常,用于过滤时lambda表达式中的空值

时间:2017-10-26 09:51:16

标签: java lambda java-8

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

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

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

4 个答案:

答案 0 :(得分:43)

你可以反转2"操作数" equals方法:

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

这样,因为"In Progress"永远不会为空,所以不会成为NPE!

答案 1 :(得分:24)

尝试过滤掉具有空状态的对象

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

答案 2 :(得分:12)

您可以链接/合并filter条件以对具有短路条件的非空值进行操作:

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

答案 3 :(得分:4)

假设status = null,您不会选择它。然后,您可以使用"In Progress".equalsIgnoreCase(t.getStatus())来避免状态中出现任何null值。

整体而言,

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