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>> 

更进一步,您可以使用flatMapIterableSet of Map条目将MapList<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