Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
分かった気になるはじめての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.7k
What are AtCoder and competitive programming
kirimin
0
10k
バーチャル男声幼女プログラマーとして活動した1年間の振り返り
kirimin
0
1.2k
アプリエンジニアでも神絵師になりたい!
kirimin
4
5.6k
Watashi ni Kotlin ga maiorita
kirimin
0
620
NEMのAPIとモザイクであそぼう
kirimin
0
440
はじめようきれいなコード
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
公共分野での生成AI活用
toru_kubota
1
310
新卒エンジニア、 介護士になる
ryu1013
1
690
Copilot Coworkで「みのるん式」やってみた
minorun365
PRO
2
1.6k
仕様と現実の間で落とし所を探るリモートMCPの認証・認可 — Sansanの認証基盤における課題と実践
sansantech
PRO
2
190
バックオフィスに染み出すTypeScript ── clasp で安全に仕組みを作る
nealle
1
200
お客様の「やりたい」の先を見通す合意形成プロセス ~裏にある課題と不安を解きほぐすコツ~
yukakoseki
0
130
Cloudflareの向き先
chimame
1
140
AI時代に求められる優秀なTechLeadの振る舞い
pospome
11
15k
顧客合意を取りながら進めるAWSコスト削減の実践
optim
0
150
Metadata - Section 3 : Dublin Core Standard · DC
mohab1
0
120
TSKaigi Sendai 2026 - tsgo時代のTypeScript Playgroundはどう動くか
teamlab
PRO
0
110
eBPF 簡介 2026 版
shunghsiyu
0
190
Featured
See All Featured
It's Worth the Effort
3n
188
29k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
560
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Six Lessons from altMBA
skipperchong
29
4.6k
The Limits of Empathy - UXLibs8
cassininazir
2
770
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
Designing for Performance
lara
612
70k
Everyday Curiosity
cassininazir
0
400
How STYLIGHT went responsive
nonsquared
100
6.4k
What the history of the web can teach us about the future of AI
inesmontani
PRO
3
800
Music & Morning Musume
bryan
48
7.5k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
740
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等が必須?)
なんとなく 分かった気になれましたか?
ご清聴ありがとうございました!