2017-08-21 56 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

相關問題