加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

RxJava在列表上执行操作并返回一个observable

发布时间:2020-12-15 02:18:11 所属栏目:Java 来源:网络整理
导读:我是Rx Java的新手(特别是Rx Java2),我在使用看似相对简单的操作时遇到了一些麻烦.我需要从db获取一些数据,遍历数据(它表示为列表),对每个项执行操作,将数据包装在另一个对象中并返回.这是我到目前为止: mDataManager .getStuffList(id) .flatMapIterable(l
我是Rx Java的新手(特别是Rx Java2),我在使用看似相对简单的操作时遇到了一些麻烦.我需要从db获取一些数据,遍历数据(它表示为列表),对每个项执行操作,将数据包装在另一个对象中并返回.这是我到目前为止:

mDataManager
    .getStuffList(id)
    .flatMapIterable(listOfStuff -> listOfStuff)
    .flatMap(item ->
         mDataManager
             .performCount(id,item.getTitle())
             .doOnNext(item::setCounter)
             .takeLast(1)
             .map(counter -> item))
    .toList()
    .toObservable()
    .flatMap(listOfStuff -> Observable.just(new StuffWrapper(listOfStuff));

我遇到的问题是我的数据管理器调用从未完成.这个想法是,每当底层数据发生变化时,UI也会发生变化.但是,如果不完成这些调用,toList()将不会发出该事件.

解决方法

在RxJava 2中,toList返回一个Single:它相当于只有一个项目的Observable.您可以通过添加.toObservable将其转换为Observable,但通常不需要这样做.

关于您的其他更改,无论何时基础数据发生变化,您的意思是什么?您的数据管理员是否会通知您数据更改?

编辑:如果你的mDataManager.getStuffList(id)调用返回一个发出多个项的Observable(也就是说,它永远不会完成但总是在更改后发出最新的数据集),那么你需要做这样的事情:

mDataManager
.getStuffList(id)
.flatMap(listOfStuff ->
    Observable
    .from(listOfStuff)
    .flatMap(item ->
         mDataManager
             .performCount(id,item.getTitle())
             .doOnNext(item::setCounter)
             .takeLast(1)
         .map(counter -> item)
         .toList()
    )
)
...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读