如何在java

时间:2016-01-06 15:30:42

标签: java filter java-stream

我有一个相当令人讨厌的命令,它会在过滤器中抛出空指针异常。它看起来像这样:

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()...

有办法做到这一点吗?或者某种方法可以解决这个问题?

1 个答案:

答案 0 :(得分:3)

如果我理解正确,attr.getAllValues()调用可以返回null,这会导致getValue()抛出NPE。

如果是这样,为什么不过滤两次呢?第一个过滤器用于删除getAllValues上返回null的所有属性,第二个用于删除当前拥有的属性。