web-dev-qa-db-ja.com

Flowableから一度に1つのリストアイテムを発行します

_Flowable<RealmResults<MyClass>>_を返すメソッドがあります。レルムに精通していない人にとっては、RealmResultsは単なるアイテムのListです。

_Flowable<RealmResults<MyClass>>_が与えられた場合、各MyClassアイテムを発行して、各アイテムに対してmap()操作を実行できるようにします。

私は次のようなものを探しています:

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

どのオペレーターが各リストアイテムを順番に発行しますか?

5
Orbit

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);
11
Adam Dye

問題は、結果をFlowable<List<MyClass>>として保持するのか、それとも順序を保持したままFlowable<MyClass>として保持するのかということです。

最初の場合、

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

2番目の場合、これで十分です。

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