2017-09-06 14 views
2

シングルからシングルへのようなオブザーバブルを変換することは可能ですか?オペレータcompose()がこの目的のために使用されていると思いますが、実装方法が分かりません。RXjavaのトランスフォームのタイプ

私がここで達成したいことは、次のコードスニペットでより明確に理解できます。

@Override 
public Single<SystemDefaults> getSystemDefaults() { 

    SystemDefaults systemDefaults = new SystemDefaults(); 
    return systemDao.getRoles().compose((SingleTransformer<List<Role>, SystemDefaults>) upstream -> { 
     //WHAT SHOULD I DO HERE? 
    }); 

} 

私はRxJava(Android)にはかなり新しく、ここでかなり失われています。

答えて

1

オペレータmapが必要です。 Mapは(など、またはSingleMaybe s)はあなたのObservableのすべてのアイテムを取り、別の値に変換:

Observable.just(1)          // Start emitting Integers 
       .map(number -> number.toString()})  // Transform it to String 
       .subscribe(someString -> System.out.println(someString.getClass()));  // Receive an String 
1

はいオペレータはあなたが作ったものを探していて、以前の観測可能な/単一から観測可能な/単一のものを変換するために使用されます。

ここでは、Integer observableをString observableに変換する例を示します。

Observable.Transformer<Integer, String> transformIntegerToString() { 
     return observable -> observable.map(String::valueOf); 
    } 

    /** 
    * In this example we use a transformer to get the Integer item emitted and transform to String 
    */ 
    @Test 
    public void observableWithTransformToString() { 
     Observable.just(1) 
        .map(number -> { 
         System.out.println("Item is Integer:" + Integer.class.isInstance(number)); 
         return number; 
        }) 
        .compose(transformIntegerToString()) 
        .subscribe(number -> System.out.println("Item is String:" + (String.class.isInstance(number)))); 

    } 

あなたがここに別のスレッドで別の観測可能にそれを変更する方法を別の例を見ることができます。 https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/transforming/ObservableCompose.java

+0

ここmap' 'のご使用は少し奇妙です。 'doOnNext()'を使う方が便利なはずですか? – Pelocho

+0

私は本当に作文の使い方を教えていただきありがとうございますが、以下の答えは私が探していたものでした。 Ty –

+0

はい、MapまたはFlaMapを使用して、obsrrvable値を変更できます。作成するのは、Observable/Singleという新しいオブジェクトを作成するだけでなく、含まれる値を変更することです。 – paul

関連する問題