观察 java 中的实时数据列表

Observe list of live data in java

我有一个 liveData 列表,比如 List<LiveData<String>>。我想观察这个列表,这样每当 LiveData 中的 String 发生变化时,它就会用这个 String.
通知列表的观察者 我该怎么做?
我的列表元素是严格的 LiveData<String> 所以,它不能简化为 String.
我知道如何观察 LiveData<String>,但不会观察 List<LiveData<String>>
请帮忙。

Edit:

The element of the list is LiveData<String> because the String it is coming from the internet. So, list elements are holding object of LiveData<String>.

如果要观察 List<LiveData<String>>,则必须为列表的每个元素附加一个观察者。列表本身不可观察,只能观察其中的每个 LiveData 元素。所以,简单地说:

  1. 迭代列表
  2. 观察每个 LiveData 元素
  3. 决定你想对每个观察到的元素做什么

I know how to observe LiveData, but not List<LiveData>.

没那么难,你需要做的就是把List<LiveData<String>>换成LiveData<List<String>>

为此,您可以使用 MediatorLiveData

fun <T> List<LiveData<T>>.combineList(): LiveData<List<T>> = MediatorLiveData<List<T>>().also { mediator ->
    val mutableList = this.map { it.value }.toMutableList()

    mediator.value = ArrayList(mutableList).toList()

    forEachIndexed { index, liveData ->
        addSource(liveData) { value
            mutableList[index] = value
            mediator.value = ArrayList(mutableList).toList()
        }
    }
}

哪个应该可以被单个观察者观察到

strings.combineList().observe(viewLifecycleOwner) { listOfStrings -> ... }

所有代码均可直接转换为 Java,此答案中未使用任何 Kotlin 特定代码。