我有一个相当令人讨厌的命令,它会在过滤器中抛出空指针异常。它看起来像这样:
someObject.getAttributes().stream().filter(
attr -> attr.getAllValues().getValue().stream().filter(
rule -> "some rule".equals(value.getType())).findFirst().isPresent())
.forEach(this::visit);
“this :: visit”为每个值调用一个本地方法。 getAttributes()方法会出现此问题。它可以返回null,因此在调用getValue()时抛出一个空指针。我想要的是getValue()(以及之后的所有内容)仅在getAllValues()不为null时才被调用。
我想假设需要发生的事情attr -> attr.getAllValues()
需要有一些条件语句,例如:
attr -> attr.getAllValues() ? return : attr.getAllValues().getValue()...
有办法做到这一点吗?或者某种方法可以解决这个问题?
答案 0 :(得分:3)
如果我理解正确,attr.getAllValues()
调用可以返回null,这会导致getValue()
抛出NPE。
如果是这样,为什么不过滤两次呢?第一个过滤器用于删除getAllValues
上返回null的所有属性,第二个用于删除当前拥有的属性。