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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
13k
RxJava Droidkaigi
kazy1991
1
120
rx.pdf
kazy1991
0
150
はじめてのvimscipt
kazy1991
1
470
Other Decks in Technology
See All in Technology
LLM Internals: 언어 모델의 계보와 알고리즘 진화 (2023~2026)
inureyes
PRO
1
800
Oracle MCP Servers Explained
thatjeffsmith
0
310
医療の現場を変革に挑戦した半年間の軌跡 - PythonとAIで現場を変える / From Code to Care
soudai
PRO
0
360
AIにブラウザを触らせて、E2EテストをPlaywrightで書く
koji_kawamura
0
210
MulticaとPi Coding Agentで、小規模OSSを30本同時運用した流れ
eiei114
0
130
巨大気象データと戦う ― サロゲートモデル学習を高速化する圧縮技術
gpuunite_official
0
170
三人寄ればチューリング完全
puhitaku
4
1.5k
SmartHR Engineering Team Deck
smarthr
1
3.1k
AI時代に、人は何を、どう学ぶのか #pbl_pub / What and How Do We Learn in the AI Era?
takaking22
1
180
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.2k
20260817_生成AIの動向と中学校・高等学校での活用を考える_v1.00_公開用
doradora09
PRO
0
140
DDDのエッセンスを取り入れたAIでの開発
ak2ie
0
170
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
250
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
A better future with KSS
kneath
240
18k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
350
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
270
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
New Earth Scene 8
popppiees
3
2.5k
30 Presentation Tips
portentint
PRO
1
370
Agile that works and the tools we love
rasmusluckow
331
22k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Scaling GitHub
holman
464
140k
The World Runs on Bad Software
bkeepers
PRO
72
12k
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)