RxJava在列表上执行操作并返回一个observable [英] RxJava performing operation on a list and returning an observable

查看:2068
本文介绍了RxJava在列表上执行操作并返回一个observable的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是RxJava的新手(特别是RxJava2),我在使用看似相对简单的操作方面遇到了一些麻烦。我需要从db获取一些数据,遍历数据(它表示为列表),对每个项执行操作,将数据包装在另一个对象中并返回。这就是我到目前为止:

I'm new to RxJava (specifically, RxJava2) and I'm having some trouble with what seems to be a relatively easy operation. I need to get some data from a db, iterate through the data (it is represented as a list), perform an operation on each item, wrap the data in another object and return. This is what I have so far:

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()就不会发出事件。

The problem I'm having is that my data manager calls never complete. The idea was that whenever the underlying data changes, the UI changes as well. However, without completing those calls, toList() won't emit the event.

推荐答案

在RxJava 2中, toList 返回单个:它相当于一个 Observable 只包含一个项目。您可以通过addin将其转换为Observable g .toObservable ,但通常不需要这样做。

In RxJava 2, toList returns a Single: it's equivalent to an Observable with exactly one item. You can convert it to an Observable by adding .toObservable, but that isn't needed that often.

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

Regarding your other changes, what do you mean by whenever the underlying data changes? Does your data manager notify you on data changes?

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

if your mDataManager.getStuffList(id) call returns an Observable that emits multiple items (that is, it never completes but always emits the latest data set after a change), then you need to do something like this:

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

这篇关于RxJava在列表上执行操作并返回一个observable的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆