gpt4 book ai didi

java - 从可选值的供应商序列中提取第一个定义值(如果有)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:14 24 4
gpt4 key购买 nike

给定一个序列 Supplier<Option<T>> -- 例如,方法引用列表 -- 如果有的话,获得第一个定义结果的惯用方法是什么?理想情况下,在第一个成功结果后无需调用任何更多供应商。

我现在拥有的是:

Stream<Supplier<Option<Foo>>> suppliers = Stream.of(
bar::fooOption,
baz::fooOption,
qux::fooOption
);

Option<Foo> firstDefined = suppliers.map(Supplier::get)
.find(Option::isDefined)
.flatMap(Function.identity());

但似乎应该有一种方法来 flatmap that 💩甚至奉承。

最佳答案

我只能看到与您的步骤数相同的替代解决方案。

Option<Foo> firstDefined = suppliers.map(Supplier::get)
.find(Option::isDefined)
.map(Option::get);

如果您可以使用简单的 map 而不是 flatMap,请改用它,因为它通常会更快,尤其是在多值 monadic 容器上。虽然对于 0/1 值的 monads 可能没有太大区别,比如 Option,也许相反,在这种情况下它可能会慢一点,因为它创建了一个额外的 Option.

关于java - 从可选值的供应商序列中提取第一个定义值(如果有),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45289511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com