反应式Java:根据两个项目的比较在流中插入项目

时间:2015-11-06 06:23:51

标签: java reactive-programming

如果通过比较流中的两个项目满足条件,我想在流中插入项目。流意味着Observable<Object>

在图表中,它看起来像

10 -> 20 -> 40 -> 50 -> 70 -> 90 (input stream)
|if two items are more than 10 apart, insert item that is 10 times the previous item in comparison, both comparison items are always emitted|
10 -> 20 -> 200 -> 40 -> 50 -> 500 -> 70 -> 700 -> 90 (output stream)

以上只是一个例子。实际上,我希望有一个从前一项映射的通用插入项。

感谢。

1 个答案:

答案 0 :(得分:0)

在Rx中执行此操作的常用方法是使用flatMap / concatMap并组合observable。在你的情况下,你还需要使用scan或zipWith来访问当前和前一个元素(你也可以使用一个状态,但那不是Rx-y):

sourceObs.startWith(0).zip(sourceObs, (prev, next) ->
    next > prev+10 ?
        Observable.just(prev*10, next) :
        Observable.just(next))
    .concatMap(o -> o);