我知道如何转换 Map<X, Y>
至 Map<X, Z>
使用流,它还有一个 previous question对这个。
但我想学习如何使用 RxJava 来实现。
更具体地说:
//Input:
Map<String,String> in; // map from key to a string number, for example: "10"
//transform: in -> out
//Output:
Map<String,Integer> out; //map from the same key to Integer.parseInt(val) (invariant: val is a string number)
最佳答案
我认为 Dávid Karnok 在某种意义上是正确的,如果您的唯一目标是转换单个 map ,那么对于 RxJava 来说并不是特别有用的情况。 如果您有(多个) map 的 Observable,它可能更有意义。
然后我建议使用便利的 Guava 转换器:https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/Maps.html#transformValues(java.util.Map,%20com.google.common.base.Function)
Map<String,String> source1 = ...
Map<String,String> source2 = ...
Observable.just(source1, source2)
.map(map->Maps.transformValues(map, v->Integer.parseInt(v)));
Guava 的 map 值转换器的一个好处是它不会重新创建 map 数据结构,而是创建一个转换后的 View ,该 View 可以延迟(动态)映射值。
如果你不想依赖 Guava,你可以简单地实现 Func1<Map<String,String>,Map<String,Integer>>
自己。
关于Java8 : Map<X, Y> 到 Map<X, Z> 使用 RxJava,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38126448/