RxJava对列表执行操作并返回可观察的
我对RxJava(特别是RxJava2)还不太熟悉,而且我对一个相对简单的操作有一些问题。我需要从数据库中获取一些数据,遍历数据(它表示为一个列表),对每个项执行操作,将数据包装到另一个对象中并返回。这就是我到目前为止所做的:RxJava对列表执行操作并返回可观察的,java,android,rx-java,reactive-programming,rx-java2,Java,Android,Rx Java,Reactive Programming,Rx Java2,我对RxJava(特别是RxJava2)还不太熟悉,而且我对一个相对简单的操作有一些问题。我需要从数据库中获取一些数据,遍历数据(它表示为一个列表),对每个项执行操作,将数据包装到另一个对象中并返回。这就是我到目前为止所做的: mDataManager .getStuffList(id) .flatMapIterable(listOfStuff -> listOfStuff) .flatMap(item -> mDataManager
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
返回一个单个
:它相当于一个可观察的
,只有一个项。您可以通过添加.toObservable
,将其转换为可观察,但这并不是经常需要的
关于您的其他更改,当基础数据更改时,您所说的是什么意思?您的数据经理是否会在数据更改时通知您
编辑:如果您的mDataManager.getStuffList(id)
调用返回一个发出多个项目的可观察的
(即,它从未完成,但总是在更改后发出最新的数据集),那么您需要执行以下操作:
mDataManager
.getStuffList(id)
.flatMap(listOfStuff ->
Observable
.from(listOfStuff)
.flatMap(item ->
mDataManager
.performCount(id, item.getTitle())
.doOnNext(item::setCounter)
.takeLast(1)
.map(counter -> item)
.toList()
)
)
...
是的,我使用的是SqlBrite
,它是安卓SQLite助手类的Rx包装器,它在数据更改时提供通知。但是如果我正确理解了自己的代码,toList()会阻止我在第一次通知之后收到这些通知吗?还是我遗漏了什么?是的,我使用的是RxJava2Well,如果您需要多次调用mDataManager.getStuffList
(每次数据更改一次),那么您需要将所有内容打包。如果每当数据库中的内容发生变化时,getStuffList
调用返回一整套项目,那么您应该跳过FlatMapetable
并将所有内容嵌套在该flatMap中。您能提供后一种示例吗?我不太清楚你的意思,谢谢,但我仍然有这个问题-它似乎没有编译。首先,我想你的意思是Observable.fromIterable()
,因为在这个对象上没有from
方法?我应该在哪里使用toList()
操作符?据我所知,您建议的想法是从数据库中返回可观察对象,并通过flatMap对每个项目执行操作。但是我在doOnNext