基本的には、 Transformations
の拡張関数の集合です。
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.1.0-alpha04"
class MainActivityViewModel : ViewModel() { private val source1LiveData = Source1Livedata() // 同じものが流れてきたときにブロックしてくれる val distinctResult: LiveData<String> = source1LiveData.distinctUntilChanged() // 射影 val mapResult: LiveData<String> = source1LiveData.map { it.toUpperCase() + it.toLowerCase() } // 新しいものが流れてきたら前のものを中止するマン val switchMapResult: LiveData<String> = source1LiveData.switchMap { name -> getFullName(name) } // このようなメソッドが必要かは置いておいてLiveData を返す関数の時に使うと良さそう fun getFullName(name: String): LiveData<FullName> { val liveData = MutableLiveData<String>() liveData.value = name + name return liveData } } // ちゃんとした型定義をすべき... typealias FullName = String class Source1Livedata : LiveData<String>()