Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
分かった気になるはじめてのRxJava
Search
きりみん
October 28, 2014
Technology
7.4k
14
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
分かった気になるはじめてのRxJava
きりみん
October 28, 2014
More Decks by きりみん
See All by きりみん
AndroidエンジニアがRailsにチャレンジしてる理由
kirimin
1
1.6k
What are AtCoder and competitive programming
kirimin
0
10k
バーチャル男声幼女プログラマーとして活動した1年間の振り返り
kirimin
0
1.1k
アプリエンジニアでも神絵師になりたい!
kirimin
4
5.5k
Watashi ni Kotlin ga maiorita
kirimin
0
610
NEMのAPIとモザイクであそぼう
kirimin
0
420
はじめようきれいなコード
kirimin
8
3.2k
Material Components for Android触ってみる
kirimin
7
2.1k
[社内LT]あたらしいMaterial Design
kirimin
1
1.8k
Other Decks in Technology
See All in Technology
千葉での単身赴任からAWSをやり続け、千葉に戻ってきた話
yama3133
1
120
[AWS Summit Japan 2026]迷っているあなたへ_小さな一歩が、やがて自分を助けてくれる
sh_fk2
2
410
Lightning近況報告
kozy4324
0
220
AIをフル活用してオンコール機能のプロトタイプを2日で作った話 / Building an AI-Powered On-Call Prototype in Just Two Days
nari_ex
0
120
AWS Security Hub CSPMの成功・失敗体験
cmusudakeisuke
0
540
元銀行員がAIだけでアプリを量産!「バイブコーディング実演セミナー 」
tatsuya1970
0
110
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
170
Bucharest Tech Week 2026 - Guardians of the Cloud-Native Galaxy
edeandrea
PRO
0
140
「ビジネスがわかるエンジニア」とは何か?
ryooob
0
300
Claude Codeをどのように キャッチアップしているか
oikon48
13
8.8k
2026年6月23日 Syncable Tech + Start Python Club にて
hamukazu
0
150
螺旋型キャリアの生存戦略 / kinoko-conf2026
rakus_dev
1
970
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Six Lessons from altMBA
skipperchong
29
4.3k
The untapped power of vector embeddings
frankvandijk
2
1.8k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
290
ラッコキーワード サービス紹介資料
rakko
1
3.7M
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
400
Writing Fast Ruby
sferik
630
63k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
160
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
200
Transcript
分かった気になる はじめてのRxJava @kirimin
自己紹介 @kirimin • ふつーのAndroidエンジニア • 仕事ではほぼJavaしか書いたことない • りあくてぃぶ?ナニソレ…というレベル • 人生初LT
1ヶ月くらい前のある日… 某氏「勉強会でLTしてみません?」 僕 「なにそれこわい」 某氏「こわくない」 僕 「ヨ、ヨッシャ!やります!」
とは言ったものの
RxJavaってなんだ…
ググってみた
結果
_人人人人人人人人人_ > よく分からない <  ̄Y^Y^Y^Y^Y^Y^Y^Y ̄
RxJava??? • 日本語の情報があんまり見つからない • 色々分かってる前提の情報が多くてそもそも概要が 掴めない • なんかとにかく敷居が高そう
これは…
他の人もそう思ってるはず!
というわけで
分かった気になる はじめてのRxJava (※調べてみた)
RxJavaとは(雑) • リアクティブプログラミングを行うためのライブラリである 「Reactive Extensions」のJVM版 • StreamAPI+非同期コールバックみたいなイメージ • イベントを持ったObservableインスタンスに小さな関数をチェーン してゆく事でイベントから返ってくるデータをストリーム的に加工
する処理を定義し、遅延実行・非同期コールバックを行える • Java6以上をサポートしていてScala,Groovy,ClojureなどのJVM言語 やAndroidでも使える
基本的な使い方 1.Observableを生成する 2.Observerを生成する 3.ObservableにObserver渡して実行する
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つの文字列を結果として伝えるイベント を定義しています。
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出力させています。
myObservable.subscribe(myObserver); 3.ObservableにObserverを渡して実行する 最後にObservableのsubscribeメソッドにObserverを渡して イベントを実行します。 この時点で初めてObservableが実行され、 onNextに渡した結果が順番にObserverに伝わります。 そして >”Hello” >”world!” と出力されます。
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時に関数を実行してくれます。
Observable.from(new String[]{"Hello", "world!"}).subscribe(System.out::println); ここまでJava8なら1行
Observableを加工する • map • flatMap • filter
Observableを加工する • map • flatMap • filter
map Observableの要素それぞれに対し関数を適用する事で 別のObservableに変換します。
Observable.from(new String[]{"Hello", "world!"}) .map(String::length) .subscribe(System.out::println); map 文字列の代わりにInteger型の結果が渡され >5 >6 が順番に出力されます。
実際のコード例です。 subscribeの前にmapを挟み文字列を文字列長の数値に変換しています。
Observableを加工する • map • flatMap • filter
flatMap Observableの各要素から別のObservableを作り 一つのObservableに変換します。
Observable.from(new String[]{"Hello", "world!"}) .flatMap(s -> Observable.from(s.split(""))) .subscribe(System.out::println); flatMap Helloworld!が一文字ずつ出力されます。 実際のコード例です。
各要素の文字列を一文字ずつに分割したObservableを作り フラット化しています。
Observableを加工する • Map • flatMap • filter
filter Observableの要素から条件に合うものだけを抽出します。
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”以外が一文字ずつ出力されます。
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。 簡単に非同期処理へ切り替えられます。
And more... RxJavaのGitHubWikiページを見れば他にも大量にある便利メソッドと その詳しい説明が載っています。 https://github.com/ReactiveX/RxJava/wiki
まとめ • 非常に多機能で奥は深そう • しかし使い始める敷居は意外と高くないのでは • ただしラムダが無いとかなり辛いコードに… (Java8未満で使うならGroovy,Retrolambda等が必須?)
なんとなく 分かった気になれましたか?
ご清聴ありがとうございました!