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
130
rx.pdf
kazy1991
0
160
はじめてのvimscipt
kazy1991
1
480
Other Decks in Technology
See All in Technology
AWS Quick 入門 | 目指せ Quick マスター 01
inariku
PRO
2
280
BALLAS Technology Deck
ballas_inc
0
410
属人化したISMS運用をGitHubとAIで仕組み化した1年間の記録
sioncojp
4
1.9k
現場を動かすAIエージェント#2_製造業現場でのAI活用から見た、ハマる罠と実践知
kintotechdev
2
210
AWSを利用する上で知っておきたい名前解決の話 2026
nagisa53
5
3.3k
81天的 AI Agent 軟體開發團隊治理實務分享
regionbbs
0
150
アラートを見直していたら営業組織への理解にちょっとだけ繋がった話
z63d
0
150
eBPF 簡介 2026 版
shunghsiyu
0
190
自治体AIコンタクトセンター、何をどこに任せる?~Amazon Connect Customer +Amazon Bedrockの実践知~ / 20261107 Satoshi Torano
shift_evolve
PRO
1
130
プロダクションコードにおける encoding/json から encoding/json/v2 へのスムーズな移行
sansantech
PRO
1
240
業務でAWSをあまり使っていない私が、AWSへのモチベを保つ方法
smt7174
0
180
[dbts2026]数十PBの超巨大データ×AI活用を支えるSnowflakeの実力〜大規模環境におけるアーキテクチャと運用のリアル〜
y_matsubara
0
130
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
570
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
23k
The World Runs on Bad Software
bkeepers
PRO
72
12k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
890
Designing Experiences People Love
moore
143
24k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
470
Site-Speed That Sticks
csswizardry
13
1.6k
The Curious Case for Waylosing
cassininazir
1
610
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.3k
Building an army of robots
kneath
307
47k
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)