我有 Observable<Rates>
和Rate只是一个简单的对象:
Rate(val value:String){}
Rates(val rates: List<Rate>)
我想将 Observable<Rates>
改为 Observable<HashMap<String,Long>
.
所以例如对于费率 Rates(arrayOf(Rate("1"),Rate("2"), Rate("3"),Rate("3"), Rate("2"),Rate("2")))
我期待结果:
(1 -> 1)
(2 -> 3)
(3 -> 2)
(4 -> 0)
(5 -> 0)
我开始创建这样的东西:
service.getRates()
.flatMap {it-> Observable.from(it.rates) }
.filter { !it.value.isNullOrEmpty() }
.groupBy {it -> it.value}
.collect({ HashMap<String,Long>()}, { b, t -> b.put(t.key, t.count???)}
但我被困在这里,我不知道所有的 Value ?如果没有5中的4,我不知道如何添加空值(0) . 有没有办法用rx做到这一点?
3 回答
我认为这更多是关于函数式编程而不是RxJava相关问题
从
Rates -> Map<String,Int>
实现映射功能 .技巧:合并两个
Pair<String,Int>
列表以形成Map<String,Int>
在
Observable.map
中应用该功能请查看代码中的注释以获取问题的答案 .
诀窍是在GroupedObservable上使用count,因为它只在源observable完成时发出单个值:
从那里开始: