RxJava如何将一个列表的项目分组到Map <key,list <value =“”>&gt;

时间:2017-08-21 06:54:59

标签: kotlin rx-java

我有一个班级&#34;内阁&#34;有这样的结构:

class Cabinet {
   var title: String
   var floor: Int
   var cabinetNumber: Int
}

另一个课程&#34; Tabs&#34;

class Tabs {
   var floor: Int
   var cabinetList: List<Cabinet>
}

所以在RxJava的帮助下,我试图创建Observable<List<Tabs>>。 首先我得到了一个内阁清单,所以我必须得到所有的内阁和#34;到&#34;标签&#34;结构

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

我想用#34;来映射&#34;创建集合Map<floor: Int, cabinetList: List<Cabinet>>但不知道如何制作集合- (void)webViewDidFinishLoad:(UIWebView *)webView { [webView.scrollView scrollRectToVisible:CGRectMake(0.0f, 0.0f, 0.0f, 0.0f) animated:NO]; } 。 请帮忙

1 个答案:

答案 0 :(得分: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>>

更进一步,您可以使用MapList<Tab> Set条目将Map映射到 .toObservable() // because collectInto returns Single .flatMapIterable { it.entries } .map { Tab(floor = it.key, cabinetList = it.value) } // here is your Observable<List<Tabs>>

RxJava2

P.S。我假设您使用{{1}}。