Upgrade to Pro — share decks privately, control downloads, hide ads and more …

分かった気になるはじめてのRxJava

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for きりみん きりみん
October 28, 2014

 分かった気になるはじめてのRxJava

Avatar for きりみん

きりみん

October 28, 2014
Tweet

More Decks by きりみん

Other Decks in Technology

Transcript

  1. Observable<String> myObservable = Observable.create( new Observable.OnSubscribe<String>() { @Override public void

    call(Subscriber<? super String> subscriber) { subscriber.onNext("Hello"); subscriber.onNext("world!"); subscriber.onCompleted(); } } ); 1.Observableを生成する Observableはイベントを定義したインスタンスとして存在し、 イベントの結果を伝える役目を持ちます。 この例ではHelloとWorldの2つの文字列を結果として伝えるイベント を定義しています。
  2. Observer<String> myObserver = new Observer<String>() { @Override public void onNext(String

    s) { System.out.println(s); } @Override public void onCompleted() {} @Override public void onError(Throwable e) {} }; 2.Observerを生成する ObserverはObservableからの結果を受ける側です。 この例では結果をそのままprint出力させています。
  3. Observable<String> myObservable = Observable.from(new String[]{"Hello", "world!"}); myObservable.subscribe(new Action1<String>() { @Override

    public void call(String s) { System.out.println(s); } }); もっと簡潔に書く fromは受け取った配列やIteratorの要素を順番に結果として伝える Observableを生成してくれます。 また、subscribeにはObserverの代わりに関数(Action1インターフェイスの 実装)を一つだけ渡す事で、onNext時に関数を実行してくれます。
  4. Observable.from(new String[]{"Hello", "world!"}) .flatMap(s -> Observable.from(s.split(""))) .filter(s -> !s.equals("l")) .subscribe(System.out::println);

    filter 実際のコード例です。 先程の例にfilterを挟み要素から”l”を取り除いています。 "l”以外が一文字ずつ出力されます。
  5. Observable.from(new String[]{"Hello", "world!"}) .subscribeOn(Schedulers.newThread()) .flatMap(s -> Observable.from(s.split(""))) .filter(s -> !s.equals("l"))

    .subscribe(System.out::println); 別スレッドで実行する 処理を別スレッドで実行したければsubscribeOnを呼ぶだけでOK。 簡単に非同期処理へ切り替えられます。