我在这件简单的事情上遇到了麻烦。我有一个返回 Optional<TypeA>
的方法:
public Optional<TypeA> getFirst() {
return set.stream().filter(it -> it.getStatus() == SUCCESS).findFirst(); // set is a Set<TypeA>
}
...然后我从以下位置调用它:
public boolean hasFirst() {
return types.parallelStream() // types is a List<TypeB> that has a Set<TypeA>
.filter(it -> it.getTotalAmount() > 0)
.map(TypeA::getFirst)
.findFirst() // this can return an Optional[Optional.empty]
.isPresent();
}
问题是,空
Optional
的 Optional
返回 true
,正如预期的那样,所以我不知道如何正确解决这个问题!有什么线索吗?
最佳答案
您可以使用 Optional#flatMap
来“解开”内部可选内容:
public boolean hasFirst() {
return types.parallelStream()
.filter(it -> it.getTotalAmount() > 0)
.map(TypeA::getFirst)
.findFirst() // return Optional[Optional.empty]
.flatMap(i -> i) // <---
.isPresent(); // true
}
If a value is present, apply the provided Optional-bearing mapping function to it, return that result, otherwise return an empty Optional.
关于java - "Unwrap"在 Java 流(或并行流)中返回之前 Optional.empty 的可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41557087/