2016-05-01 4 views
2

「ハッシュマップ」キーを値フィールドとして設定して新しいハッシュマップまたはArrListに変換するには、rx演算子を使用する方法がありますか?RxJavaを使用してHashMap値を変換する

Observable<HashMap<String,Allergy>> observable = MyREST.getsAllergiesApi().getAllAllergiesRx(); 
    observable 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .unsubscribeOn(Schedulers.io()) 
      .subscribe(new Subscriber<HashMap<String, Allergy>>() { 
       @Override 
       public void onCompleted() { 
        Log.i(TAG,"onCompleted"); 
       } 

       @Override 
       public void onError(Throwable e) { 
        Log.i(TAG,"onError"); 
       } 

       @Override 
       public void onNext(HashMap<String, Allergy> allergies) { 

        mView.displayAllergies(allergies); 
        Log.i(TAG,"onNeXt"); 
       } 
      }); 

答えて

5

あなたはmap内の任意の古典的な変換を使用するかは、平らにマッピングして値を収集することができます。

Observable<Map<String, Allergy>> source = ... 

source.map(map -> { 
    HashMap<Allergy, Allergy> newMap = new HashMap<>(); 
    for (Allergy a : map.values()) { 
     newMap.put(a, a); 
    } 
    return newMap; 
}) 
.subscribe(...) 

source.flatMapIterable(map -> map.values()) 
.toMap(v -> v) 
.subscribe(...) 
+0

ありがとうございます、私は観測可能なものと演算子のものをすべて使い慣れていますが、どれほど汎用性が高いのかは本当に驚きです。 – DaniloDeQueiroz

+0

こんにちは@DaniloDeQueirozあなたはそれが最終的にどのようになったか私に見せてもらえますか? – Lobato

+0

私は@akarnokdと同じように言った。 – DaniloDeQueiroz