当条件涉及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)`