Java8:Map<;十、 Y>;映射<;十、 Z>;使用RxJava

Java8:Map<;十、 Y>;映射<;十、 Z>;使用RxJava,java,dictionary,hashmap,rx-java,Java,Dictionary,Hashmap,Rx Java,我知道如何使用流将映射转换为映射,这方面也有很多改进 但我想学习如何使用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 Intege

我知道如何使用流将
映射
转换为
映射
,这方面也有很多改进

但我想学习如何使用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)
//输入:
映射到;//从键映射到字符串编号,例如:“10”
//变换:输入->输出
//输出:
规划//从同一个键映射到Integer.parseInt(val)(不变量:val是一个字符串号)
您可以使用

我认为这是一个最小的例子:

Map<String, String> test = new HashMap<String, String>() {

    {
        put("1", "1");
        put("2", "2");
    }
};
Map<String, Integer> res = Observable.from(test.entrySet()).toMap(e -> e.getKey(), e -> Integer.parseInt(e.getValue())).toBlocking().first();
Map test=newhashmap(){
{
付诸表决(“1”、“1”);
付诸表决(“2”、“2”);
}
};
Map res=Observable.from(test.entrySet()).toMap(e->e.getKey(),e->Integer.parseInt(e.getValue()).toblock().first();

我认为Dávid Karnok在某种意义上是正确的,如果您的唯一目标是转换单个地图,那么它对RxJava并不是特别有用。 如果你有(多个)可观察的地图,这可能更有意义

然后我建议使用方便的番石榴变压器:

Map source1=。。。
映射源2=。。。
可观察。仅(源1、源2)
.map(map->map.transformValue(map,v->Integer.parseInt(v));
Guava的map value transformer的一个优点是,它不会重新创建地图数据结构,而是创建一个转换视图,该视图可以懒洋洋地(动态地)映射值


如果您不想依赖Guava,您可以自己实现
Func1

为什么要用RxJava实现这一点?如果您已经有了所有可用的数据,任何传统的方法都应该有效。我正在尝试学习如何使用RxJava,我遇到了这个问题,并想知道是否有可能使用RxJava解决它。
Map<String,String> source1 = ...
Map<String,String> source2 = ...

Observable.just(source1, source2)
    .map(map->Maps.transformValues(map, v->Integer.parseInt(v)));