Which approach is more recommended to combine multiple LiveData(s): using MediatorLiveData or switchMap?
// MediatorLiveData approach
fun <A, B, C> combine(
    liveData1: LiveData<A>,
    liveData2: LiveData<B>,
    onChanged: (A?, B?) -> C
): MediatorLiveData<C> {
    return MediatorLiveData<C>().apply {
        addSource(liveData1) {
            value = onChanged(liveData1.value, liveData2.value)
        }
        addSource(liveData2) {
            value = onChanged(liveData1.value, liveData2.value)
        }
    }
}
// switchMap approach
fun <A, B, C> combine(
    liveData1: LiveData<A>,
    liveData2: LiveData<B>,
    onChanged: (A, B) -> C
): LiveData<C> {
    return liveData1.switchMap { a ->
        liveData2.map { b ->
            onChanged(a, b)
        }
    }
}
The MediatorLiveData approach may be more common but the switchMap approach looks simpler. Both approaches seem to serve the same purpose in many cases.
 
                        
You should be using
MediatorLiveDatadirectly.All
Transformations.are actuallyMediatorLiveDatas -switchMapis just a mediator that dynamically swaps source depending on return value of providedswitchMapFunction.Second approach just generates useless overhead - you allocate
switchMapMediatorLiveDatathat keeps creating and swapping in newmapMediatorLiveDataobjects wheneverliveData1changes.