2017-08-21 30 views
0

我有一个类“内阁”有这样的结构:RxJava如何组一个列表项地图<重点,列出<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>>但不知道如何使它reqursively。 请帮助

+0

你最终转换成什么? – chandil03

回答

1

为了把你的橱柜成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>> 

的进一步深入,你可以使用flatMapIterableMapSet映射您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

相关问题