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
いつか使ってみたいOperatorたち
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
kazy1991
June 12, 2017
Technology
510
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
いつか使ってみたいOperatorたち
https://connpass.com/event/57150/
Rx Ja Night Vol.2での発表資料です。
kazy1991
June 12, 2017
More Decks by kazy1991
See All by kazy1991
基本のAndroid View開発ドキュメント
kazy1991
0
2.9k
Cookpad.apk#1-ReactNativeについて
kazy1991
1
6.6k
Cookpad TechKitchen#6-android-with-ml-and-scheduler
kazy1991
0
750
Droidkaigi 2017
kazy1991
5
12k
RxJava Droidkaigi
kazy1991
1
120
rx.pdf
kazy1991
0
150
はじめてのvimscipt
kazy1991
1
470
Other Decks in Technology
See All in Technology
第67回コンピュータビジョン勉強会CVPR2026読会前編
tsukamotokenji
0
140
カードゲーム作りが教えてくれた プロダクトオーナーシップ
moritamasami
0
110
CDKで書くECSのベストプラクティス、 改めて考え直す2026 #cdkconf2026
makies
3
760
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
5.9k
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
2
310
CIで使うClaude
iwatatomoya
0
290
AI時代の闇と光
tatsuya1970
0
110
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
470
Alphaモジュール使っていいのかい!?いけないのかい!?どっちなんだいっ!?
watany
1
270
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
260
【Claude Code】鹿野さんに聞く 私の推しの並行開発環境 大公開 / claude-code-parallel-2026-07-15
tonkotsuboy_com
12
8.6k
見守りエージェントを作ってみた(ローカルLLM + Hermes Agent)
happysamurai294
0
110
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Optimising Largest Contentful Paint
csswizardry
37
3.8k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
220
From π to Pie charts
rasagy
0
240
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
230
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
390
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.4k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
770
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Transcript
いつか使ってみたいOperatorたち Cookpad Inc. kazy1991(@101kaz)
マイナーなOperatorの紹介です • アルファベット順のOperatorのリストを読んで 知らなかったものをピックアップしました • 頭の片隅に記憶しておいていつか使ってみたい
Amb • 複数のObservableを引数に取る • 一番先にitemが流れたObservableを採用する • その他のObservableのitemは流れてこない 1/8
Amb Amb
1/8
Ambのサンプルコード fun ampSample() { val o1 = Observable.just(1, 2, 3)
val o2 = Observable.just(4, 5, 6).delay(1L, TimeUnit.SECONDS) val o3 = Observable.just(7, 8, 9).delay(2L, TimeUnit.SECONDS) Observable.amb(o1, o2, o3) .subscribe { Log.d(TAG, "item: $it") // "item: 1, item: 2, item: 3" } } RxJava 1系 RxJava 2系 fun ampSample() { val o1 = Observable.just(1, 2, 3) val o2 = Observable.just(4, 5, 6).delay(1L, TimeUnit.SECONDS) val o3 = Observable.just(7, 8, 9).delay(2L, TimeUnit.SECONDS) Observable.ambArray(o1, o2, o3) .subscribe { Log.d(TAG, "item: $it") // "item: 1, item: 2, item: 3" } } 1/8
Ambの使いみち • 複数のAPIサーバーに同時にアクセス..? • UIイベントを並べて競わせる..? • 自分は具体的な利用例が考えられなかった..! 1/8
All • 引数にFunc1の条件を渡す • 全てのitemが条件を満たせばtrueを返す • 一つでも条件を満たさない場合faseを返す 2/8
All All(x => x < 10) 5
2/8
Allのサンプルコード fun allSample() { Observable.just(1, 2, 3, 4, 5) .all
{ it < 10 } .subscribe { Log.d(TAG, "item: $it") // item: true } } RxJava 1系 2/8
Allの使いみち • 真偽値に変換されるので、Validation系かな? • こちらも良い例が思いつかなかった..! 2/8
Cache • #cacheを呼ぶとCacheObservableに変換される • 一度購読されると内容は記憶する • 二度目以降に購読された場合は記憶した内容を返す 3/8
Cache Cache
3/8
Cacheのサンプルコード fun cacheSample() { val o1 = Observable.interval(1, TimeUnit.SECONDS) .take(3)
.timestamp() .cache() o1 .doAfterTerminate { // Ұͱಉ͡item͕ྲྀΕͯ͘Δ o1.subscribe { Log.d(TAG, "2nd: item: ${it.timestampMillis}") } } .subscribe { Log.d(TAG, "1st: item: ${it.timestampMillis}") } } RxJava 1系 3/8
Cacheの使いみち • APIレスポンスを保持するとか..? • 計算量のかかる結果を保存するとか..? • 似たOperatorでreplayもあるけど使い分けはどう なるんだろう..? RxJava- Is
cache() the same as replay()? stackoverflow.com/questions/32522017/rxjava-is-cache-the-same-as-replay 3/8
Cast • 本当にitemをcastするだけのOperator • map(it -> T(it)) のような感じ • マーブルやサンプルコードは省略します
4/8
ElementAt(OrDefault) • 引数に渡したIndexのitemを返す • List#getみたいなOperator • orDefaultも用意されているので安全 • これもマーブルやサンプルコードは省略します 5/8
ToMap/ToMultiMap • itemをMapに変換する • 引数にFunc1を受取り、その中でキー名を決める 6/8
ToMap/ToMultiMap ToMap(k()) { } &OUSZ
&OUSZ &OUSZ &OUSZ &OUSZ 6/8
toMapのサンプルコード fun toMapSample() { Observable.just(1, 2, 3) .toMap { "key_$it"
} .flatMap { Observable.from(it.entries) } .subscribe { (key, value) -> // "{key_1: 1, key_2: 2, key_3: 3}" Log.d(TAG, "key: $key value: $value") } } RxJava 1系 6/8
toMultiMapのサンプルコード fun toMultiMapSample() { Observable.just(1, 2, 3, 4, 5, 6)
.toMultimap { if (it % 2 == 0) { "even" } else { "odd" } } .flatMap { Observable.from(it.entries) } .subscribe { (key, value) -> // "{even: [2, 4, 6], odd: [1, 3, 5]}" Log.d(TAG, "key: $key value: $value") } } RxJava 1系 6/8
ToMap/ToMultiMapの使いみち • アプリケーションロジックで活用できそうな気が する • 今までReduceで頑張って書いてたので書き直した いと思ってる 6/8
Timestamp • 流れてきたitemをTimestampedでwrapする • valueとtimeStampを持つdata-objectを返す • timeStampは内部でScheduler.now()が生成する 7/8
Timestamp timeStamp 5JNF 5JNF 5JNF
5JNF 5JNF 7/8
Timestampのサンプルコード fun timeStampSample() { Observable.interval(1, TimeUnit.SECONDS) .take(3) .timestamp() .subscribe {
Log.d(TAG, "item: $it") //item: Timestamped(timestampMillis = 1497221576918, value = 0) } } RxJava 1系 7/8
Timestampの使いみち • 処理が行われた時間が把握できるのでパフォーマン ス・チューニングとか..? • これも良いユースケースが見つからなかった 7/8
Sorted/ToSortedList • 流れてきたitemをソートして返す • Func1を渡すことが出来ソート条件も指定可能 • 内部ではCollections.sortを利用している 8/8
Sorted/ToSortedList Sort
8/8
Sorted/ToSortedList [ ] ToSortList
8/8
Sorted/toSortedListのサンプルコード fun sortedSample() { Observable.just(3, 2, 1, 5, 4) .sorted
{ t1, t2 -> t2 - t1 } .subscribe { Log.d(TAG, "item: $it") } } fun toSortedListSample() { Observable.range(1, 100) .toSortedList({ t1, t2 -> t2 - t1 }, 100) .subscribe { Log.d(TAG, "item: $it") } } RxJava 1系 8/8
Sortedの使いみち • 今まで、doOnNext(it -> Collections.sort(it)) の様に書いていたので早速活用していきたい • 今すぐ使えそうなOperatorが一つでも見つかってよ かった!
8/8
今日紹介したOperatorたち • Amp • All • Cast • ElementAt •
Cache • Join • ToMap/ToMultiJoin • Timestamp • Sorted/SortedList Join/GroupJoinも気になってたけど時間が足りなかった。。
以上です。ありがとうございました!! Cookpad Inc. kazy1991(@101kaz)