从Flowable一次发出一个List项

时间:2017-06-05 16:29:44

标签: java rx-java rx-java2

我有一个返回Flowable<RealmResults<MyClass>>的方法。对于那些不熟悉Realm的人来说,RealmResults只是一个简单的List项。

给定Flowable<RealmResults<MyClass>>,我想发出每个MyClass项目,以便我可以对每个项目执行map()操作。

我正在寻找以下内容:

getItems() // returns a Flowable<RealmResults<MyClass>>
    .emitOneAtATime() // Example operator
    .map(obj -> obj + "")
    // etc

什么运算符将按顺序发出每个List项?

2 个答案:

答案 0 :(得分:9)

你会flatMap(aList -> Flowable.fromIterable(aList))。然后,您可以在每个项目上map()。如果要重新收集项目,则有toList()(注意:这将是一个新的List实例)。这是一个示例,说明如何使用这些方法使用List<Integer>获取不同的类型。

List<Integer> integerList = new ArrayList<>();
Flowable<Integer> intergerListFlowable = 
            Flowable
                    .just(integerList)//emits the list
                    .flatMap(list -> Flowable.fromIterable(list))//emits one by one
                    .map(integer -> integer + 1);

答案 1 :(得分:1)

问题是,您希望将结果保留为Flowable<List<MyClass>>还是保留订单的Flowable<MyClass>

如果是第一个,

getItems()
.concatMap(results -> Flowable
   .fromIterable(results)
   .map(/* do your mapping */)
   .toList()
)

如果第二个,这应该足够了:

getItems()
.concatMap(Flowable::fromIterable)
.map(/* do your mapping */)