Android 观察多个LiveData以填充单个容器

Android 观察多个LiveData以填充单个容器,android,android-livedata,Android,Android Livedata,我有多个LiveData对象,希望将它们的内容累积到单个容器中 我怎样才能做到这一点?用Java做个例子就好了 编辑:在评论中提出的问题中,我看到了两种不同的LiveData类型。我对在多个LiveData对象中存储的列表数据感兴趣。您应该使用Mediator Live data,应该类似于: fun <T1, T2, T3> combineLiveDatas( liveData1: LiveData<T1>, liveData2: Liv

我有多个LiveData对象,希望将它们的内容累积到单个容器中

我怎样才能做到这一点?用Java做个例子就好了


编辑:在评论中提出的问题中,我看到了两种不同的LiveData类型。我对在多个
LiveData
对象中存储的
列表
数据感兴趣。

您应该使用Mediator Live data,应该类似于:

fun <T1, T2, T3> combineLiveDatas(
        liveData1: LiveData<T1>,
        liveData2: LiveData<T2>,
        transform: (T1, T2) -> T3
): LiveData<T3> {
    return CombineLiveDatas(liveData1, liveData2, transform).result
}

private class CombineLiveDatas<T1, T2, T3>(
        liveData1: LiveData<T1>,
        liveData2: LiveData<T2>,
        private val transform: (T1, T2) -> T3
) {
    private var value1: T1? = liveData1.value
    private var value2: T2? = liveData2.value
    private val mediator = MediatorLiveData<T3>()
    val result: LiveData<T3> = mediator

    init {
        mediator.addSource(liveData1) { value ->
            value?.let {
                value1= it
                notifyDataChanged()
            }
        }
        mediator.addSource(liveData2) { value ->
            value?.let {
                value2= it
                notifyDataChanged()
            }
        }
        notifyDataChanged()
    }

    private fun notifyDataChanged() {
        val v1 = value1?: return
        val v2 = value2?: return
        mediator.value = transform(v1, v2)
    }
}
有趣的组合视频数据(
liveData1:LiveData,
liveData2:LiveData,
变换:(T1,T2)->T3
):LiveData{
返回CombineLiveDatas(liveData1、liveData2、transform)
}
私有类组合数据(
liveData1:LiveData,
liveData2:LiveData,
私有val变换:(T1,T2)->T3
) {
私有变量值1:T1?=liveData1.value
私有var值2:T2?=liveData2.value
private val mediator=MediatorLiveData()
val结果:LiveData=mediator
初始化{
mediator.addSource(liveData1){value->
价值?让我们{
值1=它
notifyDataChanged()
}
}
mediator.addSource(liveData2){value->
价值?让我们{
值2=它
notifyDataChanged()
}
}
notifyDataChanged()
}
私有数据更改(){
val v1=value1?:返回值
val v2=value2?:返回值
mediator.value=transform(v1,v2)
}
}

可能重复感谢,但我的用例有点不同。对于多个LiveData对象,我有相同的类型,我希望将它们累积到一个
列表中。您知道如何在Java中实现这一点吗?