Home > database >  How to get object of Maximum value from LiveData?
How to get object of Maximum value from LiveData?

Time:04-22

I have liveData of market data. I want one market data object which have highest 'volume'. Here, volume is string value("277927.5793846733451135"), it could be null also.

I am using below code to achieve this. but, its not working.

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
        }
    })

Any help would be appreciated!

CodePudding user response:

You should be able to do something like this:

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
    }
}

I cleaned up the observe call a bit, then I'm checking if marketData.getOrNull().marketData is null right away with my let { ... } block.

If you do have marketData (the inner one), it'll then safely call maxByOrNull { it.volume }.

  • Related