- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
给定两个 Maybe
值,我如何将它们组合成一个 Maybe
将:
onSuccess()
每当源 Maybes
调用 onSuccess
onComplete()
每当 both 源 Maybes
调用 onComplete()
时?(参见 Scala 或 Vavr 中的 Option.orElse()
。)
例如,假设存在一个执行我想要的操作的 combine()
方法:
combine(Maybe.just(a), Maybe.empty()) ≍ Maybe.just(a)
combine(Maybe.empty(), Maybe.just(b)) ≍ Maybe.just(b)
combine(Maybe.empty(), Maybe.empty()) ≍ Maybe.empty()
combine(Maybe.never(), /*anything*/ ) ≍ /*the thing*/
combine(/*anything*/, Maybe.never()) ≍ /*the thing*/
起初我以为 amb()
& family 是我要找的东西,但是一旦任一源 Maybe
完成,这意味着如果第一个 Maybe
在没有值的情况下完成,您永远不会从第二个 Maybe
中获得值。
我现在正在用
Maybe.mergeArray(m1, m2).firstElement()
这似乎做我想做的事,但我不确定它是否正确,我不确定它是否是最干净的方法。 (例如,如果有一些延迟,它会在一个或另一个源执行时立即调用 onSuccess()
,还是会等待两个 onComplete()
?)
这是正确的吗?有没有更惯用的方法?
预计到达时间:我很乐意接受第一个值;我不需要等待两者都完成:
combine(Maybe.just(a), Maybe.just(b)) ≍ Maybe.just(/* a or b, don't care */)
(我可以想象我可能更喜欢其中一个的情况,并希望按参数的顺序来表明这一点,但在那种情况下,我怀疑顺序会比并行更好。)
最佳答案
有一种稍微不同的方法可能更接近您的定义。这将使用 Observable.switchMapMaybe()
:
Maps the upstream items into
MaybeSources
and switches (subscribes) to the newer ones while disposing the older ones (and ignoring their signals) and emits the latest success value of the current one if available while failing immediately if this Observable or any of the active innerMaybeSources
fail.
Observable.just(m1, m2).switchMapMaybe(m -> m).firstElement()
但是使用 Maybe.mergeArray(m1, m2).firstElement()
的方法也应该足够了。 firstElement()
运算符发出由 mergeArray()
可流动发出的第一个元素。这是无序的,因此没有关于任何 maybe 完成的信息。
关于java - 用于组合两个 Maybe 的 RxJava2 习语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49288637/
我有一个使用 HsOpenSsl 的 readPrivateKey 函数读取 Rsa key 的函数,不幸的是,我的函数的签名是这个 String -> IO (Maybe (IO Maybe Rsa
我有一个类型 data Foo = Foo { bar :: Bar, baz :: Baz } 我正在尝试解析文件以构造 Foo .我有函数可以尝试解析 Bar和 Baz成员(member) par
我有一个可能的列表和一个给我节点颜色的函数(如果存在): maybeNeighbors :: [Maybe Node] nodeColor :: Node -> Maybe Color 现在
我有一个可能的列表和一个给我节点颜色的函数(如果存在): maybeNeighbors :: [Maybe Node] nodeColor :: Node -> Maybe Color 现在
我想有一个类型的函数: f :: [Maybe a] -> Maybe [a] 例如 f [Just 3, Just 5] == Just [3, 5] f [Just 3, Nothing] ==
我刚开始学习 Haskell,我发现自己正在为家庭作业编写这段代码: eval :: ExprT -> Integer eval (Lit x) = x eval (Add x y) = (e
我有一个类型为 Integral => a -> a -> Maybe a 的函数 f。这意味着 f 1 2 是有效的代码,但是自然的组合,例如 f (f 3 4) 5 f 6 (f 7 8) f (
我刚开始学习 Haskell,我发现自己正在为家庭作业编写这段代码: eval :: ExprT -> Integer eval (Lit x) = x eval (Add x y) = (e
是否可以轻松(无需重新发明轮子)从 (Maybe a, b) 转换至 Maybe (a,b) .我看了Traversable但不能让它工作。 最佳答案 您也可以使用 Bitraversable : b
我正在处理一个库( ghcjs-dom ),其中每个函数都返回一个 IO (Maybe T) . 我有一个函数a with 返回 IO (Maybe x)和功能 b需要x作为参数并返回 IO (May
我想计算列表的两个 elemIndex 值的差值。 colours = ["blue", "red", "green", "yellow"] ib = elemIndex "blue" colours
有一个标准tryPick如果 F# 返回第一个(从左到右,如果有的话)函数在列表元素上成功应用的函数。我希望在 Haskell 中有一个像这样的标准函数。我 tried胡歌,没有找到任何东西。 我是
我想将 Gen (Maybe Int) 转换为 Maybe Int。我有一个生成 1 到 9 之间的随机 Just Int 的函数。我想使用单元格函数,但我无法更改其类型签名中的任何内容。有什么建议吗
我想将以下回调代码包装到 Maybe public class FooDataSource ... public Maybe get(){ return Maybe.create(emitte
我想将 Gen (Maybe Int) 转换为 Maybe Int。我有一个生成 1 到 9 之间的随机 Just Int 的函数。我想使用单元格函数,但我无法更改其类型签名中的任何内容。有什么建议吗
这可能是一件简单的事情,但我正在编写一个想要返回记录的函数,并且其中几个字段需要执行可能失败的操作,所以现在结果记录看起来像这样(假设它是类型别名为 MyRecord)。 { field1 : May
为什么流程会在这里抛出错误? type MaybeProp = { prop: ?number, } type DefinetlyProp = { prop: number, } const
我想建立一个 Repository返回 Single 的类. 该类应首先查看 Cache返回 Maybe如果 Maybe完成转到我的Service返回 Single interface Cache {
使用 Typescipt 4.x.x 我写了一些代码来实现其他语言 Elm/Rust/Haskell 中常用的 Maybe/Option 类型。 我想写一个可以接受映射类型的通用函数 type MyM
在 Elm 中,将 List (Maybe a) 转换为 Maybe (List a) 的好方法是什么? 逻辑很简单: 如果所有项都是Just a,则返回Just (List a) 否则,返回Noth
我是一名优秀的程序员,十分优秀!