2016-05-01 2 views
2

Есть ли какой-то способ «по пути» я имею в виду использование операторов rx, чтобы преобразовать каждое значение HashMap (задание ключа хэш-карты как поля значения) и войти в новый Hashmap или ArrList?Преобразование значений HashMap с использованием RxJava

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

Смежные вопросы