More Related Content
More from Recruit Lifestyle Co., Ltd.
More from Recruit Lifestyle Co., Ltd. (20)
Kotlin と Rxjava2
- 2. 自己紹介
● Naoto Nakazato
● Recruit Lifestyle
● HOT PEPPER Beauty
● アカウント
○ Twitter: @oxsoft
○ Facebook: naoto.nakazato
○ GitHub: oxsoft
○ Qiita: oxsoft
- 8. Maybe<T> は Single<T?> みたいなもの?
Maybe<T> Single<T?>
T T
empty
null
NoSuchElementException
Throwable Throwable
- 15. emptyも受けられてnullも返せるmap
Maybe のままなので lift を使うことで実現できる
fun <T, R> Maybe<T>.mapNullable(mapper: (T?) -> R?): Maybe<R> =
this.lift { observer -> object : MaybeObserver<T> {
}
}
override fun onComplete() {
val r = mapper(null)
if (r == null) {
observer.onComplete()
} else {
observer.onSuccess(r)
}
}
override fun onSuccess(t: T) {
val r = mapper(t)
if (r == null) {
observer.onComplete()
} else {
observer.onSuccess(r)
}
}
- 16. emptyも受けられてnullは返さないmap
fun <T, R> Maybe<T>.mapToSingle(mapper: (T?) -> R) =
this.map(mapper)
.switchIfEmpty(Single.fromCallable { mapper(null) })
オペレータの組み合わせで実現できる
※以下のようにしてしまうと、呼び出し時に mapper(null) が評価されてしまう
this.map(mapper).toSingle(mapper(null))
- 17. emptyも受けられるflatMapSingle
fun <T, R> Maybe<T>.flatMapSingleSafe(mapper: (T?) -> Single<R>): Single<R> =
this.flatMapSingleElement(mapper)
.switchIfEmpty(Single.just(Unit).flatMap { mapper(null) })
オペレータの組み合わせで実現できる
※以下のようにしてしまうと、呼び出し時に mapper(null) が評価されてしまう
this.flatMapSingleElement(mapper).switchIfEmpty(mapper(null))
- 19. まとめ
Maybe<T> は Single<T?> とは違うものだけど
KotlinにはExtensionがあるので、
(メンバーが合意できる範囲で)カスタマイズできる!
RxJava以外にも、おススメExtensionがあれば教えてください