RxJava如何将一个列表的项目分组到Map <Key,List <Value >>
我有一个这样的结构类“内阁”
class Cabinet { var title: String var floor: Int var cabinetNumber: Int }
而另一个班级“标签”
class Tabs { var floor: Int var cabinetList: List<Cabinet> }
所以在RxJava的帮助下,我试图创建Observable<List<Tabs>>
。 首先我得到一个内阁列表,所以我必须得到所有的“橱柜”“标签”结构。
fun getCabinets(): Observable<List<Tabs>> { return getCabs() //This metod returns List<Cabinet> .observeOn(Schedulers.io)) .filter { it.title != null } ... ??? //There I don't get what to do next
我以为用“toMap”来创建集合Map<floor: Int, cabinetList: List<Cabinet>>
但不知道如何重新制作。 请帮忙
把你的橱柜放到Map
你可以利用collectInto
操作符:
getCabs() .filter { it.title != null } .collectInto(mutableMapOf<Int, MutableList<Cabinet>>()) { map, cabinet -> if(map.contains(cabinet.floor)) map[cabinet.floor]?.add(cabinet) else map.put(cabinet.floor, mutableListOf(cabinet)) } // here is your Map<Int, List<Cabinet>>
更进一步,您可以使用flatMapIterable
和Set
of Map
条目将Map
到List<Tab>
:
.toObservable() // because collectInto returns Single .flatMapIterable { it.entries } .map { Tab(floor = it.key, cabinetList = it.value) } // here is your Observable<List<Tabs>>
PS我假设你使用RxJava2
。