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

and*_*ies 5 java optional

我有这样的代码:

myList.stream()
            .filter(item -> item.getName().isPresent())
            .filter(item -> item.getName().get().equalsIgnoreCase(otherName))
            .findFirst();
Run Code Online (Sandbox Code Playgroud)

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

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

ern*_*t_k 5

您可以使用Optional.filter()

myList.stream()
    .filter(item -> 
        item.getName().filter(n -> n.equalsIgnoreCase(otherName)).isPresent())
    .findFirst();
Run Code Online (Sandbox Code Playgroud)

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

  • 或 `filter(otherName::equalsIgnoreCase)` (4认同)