【发布时间】:2019-02-12 14:24:55
【问题描述】:
我想在找到第一个值时终止流的执行。但是,当我在下面运行代码时,它显示即使 first 方法中存在值,也会调用两个方法。
public static void main(String[] args) {
Optional<String> s = Stream.of(first(), second())
.filter(Optional::isPresent)
.findFirst()
.flatMap(Function.identity());
System.out.println(s.get());
}
private static Optional<String> first() {
System.out.println("first");
return Optional.of("someValue");
}
private static Optional<String> second() {
System.out.println("second");
return Optional.empty();
}
我检查了以下文档:
- 存在
如果存在值则返回 {@code true},否则返回 {@code 错误}。
- findFirst()
返回一个 {@link Optional} 描述 this 的第一个元素 流,如果流为空,则为空 {@code Optional}。如果 流没有遇到顺序,则可以返回任何元素。
所以它满足的第一个条件,第二个似乎也满足了,因为它返回:
first
second
someValue
如果第一个值存在,如何退出执行,而不执行 second 方法?
【问题讨论】:
标签: java java-stream optional