2016-05-01 21 views
2

Gibt es einen Weg, mit 'Weg' meine ich mit rx-Operatoren, um jeden HashMap-Wert zu transformieren (den hashmap-Schlüssel als Wertfeld zu setzen) und in eine neue Hashmap oder ArrList zu gelangen?HashMap-Werte mit RxJava transformieren

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"); 
       } 
      }); 

Antwort

5

können Sie verwenden jede klassische Transformation innerhalb eines map oder Sie können flach, Karte und Werte sammeln.

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

Danke, ich bin neu zu all diesen beobachtbaren und Betreiber Zeug, aber ich bin wirklich erstaunt zu sehen, wie vielseitig es ist. – DaniloDeQueiroz

+0

Hallo @DaniloDeQueiroz könnten Sie mir zeigen, wie es schließlich herauskam? – Lobato

+0

Ich habe genau wie @akarnokd gesagt. – DaniloDeQueiroz