当条件涉及Optional时,如何避免使用两个过滤器

我有这样的代码:

myList.stream()
            .filter(item -> item.getName().isPresent())
            .filter(item -> item.getName().get().equalsIgnoreCase(otherName))
            .findFirst();

(...item.getName()返回类型为Optional<String>)

我怎么能在这里将两个过滤器压缩成一个?

回答

您可以使用Optional.filter()

myList.stream()
    .filter(item -> 
        item.getName().filter(n -> n.equalsIgnoreCase(otherName)).isPresent())
    .findFirst();

内部filter调用 is Optional.filter,如果不满足过滤条件,它将返回一个空的可选项。

  • or `filter(otherName::equalsIgnoreCase)`

以上是当条件涉及Optional时,如何避免使用两个过滤器的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>