2016-06-30 43 views
1

到地圖 我知道如何使用流改造 Map<X, Y>Map<X, Z>,它也有一個 previous question這一點。
Java8:地圖<X, Y>使用RxJava

但我想了解它使用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) 
+0

爲什麼要與RxJava做到這一點?如果你已經有了所有的數據,那麼任何傳統的方法都應該有效。 – akarnokd

+0

我想學習如何使用RxJava,並且我遇到了這個問題,並想知道是否可以使用RxJava來解決它。 –

回答

1

您可以使用Observable.toMap

我認爲這是一個小例子:

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(); 
2

我認爲大衛Karnok是正確的,從某種意義上說,它不是RxJava特別有用的情況下,如果你唯一的目標是轉換單個地圖。 如果您擁有(多個)地圖的可觀察性,這可能會更有意義。

然後,我會建議使用番石榴變壓器的方便: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))); 

約番石榴的地圖值轉換的一個好處是,它不會重新映射數據結構,而是創建了一個轉化圖,該地圖懶惰地(在飛行中)。

如果你不想依賴於番石榴,你可以平凡實現Func1<Map<String,String>,Map<String,Integer>>自己。

相關問題