将热 observable 转换为冷 observable

soc*_*qwe 2 rx-java

我正在用 RxJava 观察数据库表。所有 SQL SELECT 查询都返回一个热 observable,每当我在同一个表中插入/更新/删除行时,我将重新运行任何订阅的 SELECT 查询并调用onNext(queryResult)热查询 observable。

database.select("SELECT * FROM Foo) // returns an observable
       .map(doSomething)
       .filter(aFilter)
       .subscribe (
             { 
                 //  onNext
             },
             {
                // onError
             }
          )
Run Code Online (Sandbox Code Playgroud)

这很有效。但是,在一个特殊用例中,我想避免数据库重新发出新项目。是否有某种操作符我可以用来使它成为一个单一的“冷”可观察对象,而不必更改我为热可观察对象构建的所有数据库层,如下所示:

database.select("SELECT * FROM Foo) // returns an observable
           .map(doSomething)
           .filter(aFilter)
           .toColdObservable()
           .subscribe (
                 { 
                     //  onNext
                 },
                 {
                    // onError
                 }
              )
Run Code Online (Sandbox Code Playgroud)

我知道“cold observable”这个词不合适,但我还没有找到更好的名字。所以我想要的是数据库不通知 SQL Query Observable 关于更新。所以我对“冷可观察”的意思只是查询数据库一次,之后不再接收更新。

krp*_*krp 6

简单的take(1)怎么样?这将在第一个结果后完成您的查询 observable。