如何动态更新RX Observable?

时间:2017-05-12 19:22:04

标签: java rx-java reactive-programming rx-kotlin

(在RxKotlin和RxJava中工作,但为了简单起见使用元代码)

许多Reactive Extensions指南首先从已有数据创建Observable。从The introduction to Reactive Programming you've been missing开始,它是从单个字符串

创建的
var soureStream= Rx.Observable.just('https://api.github.com/users');

同样,从RxKotlin的首页,从填充的列表

val list = listOf(1,2,3,4,5)
list.toObservable()     

现在考虑一个产生outStream

的简单过滤器
var outStream = sourceStream.filter({x > 3})

在两个指南中,源事件都声明为 apriori 。这意味着事件的时间表有某种形式

source: ----1,2,3,4,5-------
out:    --------------4,5---

如何修改sourceStream以成为更多的管道?换句话说,sourceStream创建期间没有可用的输入数据?当源事件可用时,它会立即由​​out处理:

source: ---1--2--3-4---5-------
out:    ------------4---5-------

我希望找到动态更新的Observable.add()

var sourceStream = Observable.empty()
var outStream = sourceStream.filter({x>3})

//print each element as its added 
sourceStream .subscribe({println(it)})
outStream.subscribe({println(it)})

for i in range(5):
    sourceStream.add(i)

这可能吗?

1 个答案:

答案 0 :(得分:1)

  

我是新人,但如果没有主题,我怎么能解决我的问题呢?如果我是   测试应用程序,我希望它每5次“弹出”一次更新   秒,除了这个Publish订阅,我还能怎么办呢   商业?有人可以发布这个问题的答案   涉及订阅者?

如果您想每五秒钟更新一次更新,请使用interval运算符创建一个Observable,不要使用主题。有十几个不同的运算符用于构建Observable,因此您很少需要一个主题。

也就是说,有时你确实需要一个,当测试代码时它们非常方便。我在单元测试中广泛使用它们。

To Use Subject Or Not To Use Subject?是关于主题的优秀文章。