如何从 LiveData 中获取最大值的对象?

How to get object of Maximum value from LiveData?

我有市场数据的实时数据。我想要一个具有最高 'volume' 的市场数据对象。这里volume是字符串值("277927.5793846733451135"),也可以为null。

我正在使用下面的代码来实现这一点。但是,它不起作用。

viewModel.marketlist.observe(this as LifecycleOwner, { marketdata ->
        val marketData = marketdata.getOrNull()
        if(marketData !=null) {
           val mData: MarketData? = marketData.marketData?.maxByOrNull { checkNotNull(it.volume) }

            if (mData != null) {
                binding.textViewPrice.text = mData.price
            }
        }
        else {
            //TODO
        }
    })

如有任何帮助,我们将不胜感激!

你应该可以这样做:

viewModel.marketList.observe(viewLifecycleOwner) { marketData ->
    val maxData = marketData.getOrNull()?.marketData?.let { dataValues ->
        dataValues.maxByOrNull { it.volume?.toDoubleOrNull() ?: -1.0 }
    }
    
    if (maxData != null) {
        binding.textViewPrice.text = maxData.price
    }
}

我稍微清理了 observe 调用,然后立即用我的 let { ... } 块检查 marketData.getOrNull().marketData 是否为 null。

如果您有 marketData(内部那个),它会安全地调用 maxByOrNull { it.volume }