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
いつか使ってみたいOperatorたち
Search
kazy1991
June 12, 2017
Technology
520
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.7k
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
データ_AIの事業の勝敗をわけるもの
nek0128
1
400
あるけみー式LTスライド作成術
alchemy1115
2
220
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
5
630
「ピッケル本」日本語版は4.0(第6版)が出版されるべき / pickaxe4-nagoyark05
kakutani
1
160
Azure Serverless 2026:Production-ready な AI エージェント基盤 / Azure Serverless 2026: Production-Ready AI Agent Platform
miyake
1
150
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
5
1.7k
安心して変更できるWebフロントエンドの作り方
pirosikick
5
2.6k
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
2
930
LTのテーマ どうきめてる?〜5つの型と私のやり方〜
yama3133
1
110
おい、エージェントを使って終わらせろ
nwiizo
1
570
事業課題から技術的負債に向き合う
sansantech
PRO
2
1.9k
2026-09-11 【Snowflake World Tour Tokyo 2026】Snowflakeを起点に、AI Agentが自律稼働し続ける未来へ / Driving AI Agents with Snowflake
civitaspo
0
660
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Between Models and Reality
mayunak
4
460
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
670
The untapped power of vector embeddings
frankvandijk
2
1.9k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
500
Docker and Python
trallard
47
4.2k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
The Spectacular Lies of Maps
axbom
PRO
1
990
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
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)