我有一个对象Person
,它有两个属性Name
和Status
。从对象列表中我希望过滤掉Person
状态为In Progress
的对象。这是我的代码:
personList.stream().filter(
t -> t.getStatus().equalsIgnoreCase(
"In Progress")).collect(Collectors.toList());
但是代码抛出了nullpointerexception
错误。当我检查时,我看到一些In Progress
状态的对象具有空值。我们如何在lambda中处理这个问题?
答案 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());