gpt4 book ai didi

java - findFirst 在 Stream>

转载 作者:搜寻专家 更新时间:2023-11-01 02:41:43 25 4
gpt4 key购买 nike

假设您有一个 Optional<T> 的流, 你想开火 Consumer<T>打开(如果存在)。

处理这个问题最优雅的方法是什么?

我可以通过 Optional::isPresent 过滤来管理并通过 Optional::isGet 进行映射, 但这似乎“hacky”并且不符合 Optional 的精神:

Stream.of(a, b, c, d)
.filter(Optional::isPresent)
.map(Optional::get)
.findFirst()
.ifPresent(s -> System.out.println("This was cumbersome: " + s));

最佳答案

我同意这很麻烦,但它可能是最直接的解决方案,不会变得更加复杂。

我在类似情况下做过的一件事是创建一个方法将 Optional 转换为 Stream:

private Stream<T> optionalStream(Optional<T> optional) {
if (optional.isPresent())
return Stream.of(optional.get());
else
return Stream.empty());
}

因此您可以使用 flatMap:

Stream.of(a, b, c, d)
.flatMap(this::optionalStream).findFirst()...

从 Java 9 开始,Stream 方法已添加到 Optional 中以执行此操作,因此您可以使用:

Stream.of(a, b, c, d)
.flatMap(Optional::stream)
.findFirst()...

但老实说,我不确定这是否比您的 filter 然后 map 解决方案简单得多。

关于java - findFirst 在 Stream<Optional<T>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31689408/

25 4 0