Использование преобразований для преобразования HashMap в список - PullRequest
0 голосов
/ 21 марта 2020

Итак, у меня есть модель представления, в которой будет храниться HashMap с различными продуктами, этот хэш-файл будет обновлен / удален / создан, а затем мне нужно преобразовать этот хэш-файл в список, поэтому в своем пользовательском интерфейсе я просто возвращаю измененный список

Теперь это моя модель представления

class SharedViewModel: ViewModel() {
    private val cartHashMap = MutableLiveData<HashMap<String,Cart>>()
    private var sharedHashMap = HashMap<String,Cart>()

fun setProductSelectedHashMap(productId:String,productSelected:Cart){
        sharedHashMap[productId] = productSelected
        cartHashMap.value = sharedHashMap
    }

    fun removeSelectedProduct(productId:String){
        sharedHashMap.remove(productId)
        cartHashMap.value = sharedHashMap
    }

    fun updateSelectedHashMap(productId:String,quantity:Int){
        val productCartSelected = sharedHashMap[productId]
        productCartSelected?.quantity = quantity
        sharedHashMap[productId] = productCartSelected!!
        cartHashMap.value = sharedHashMap
    }

}

Итак, у меня есть хеш-карта, которую я обновляю из другого источника, эта хеш-карта будет содержать список продуктов, которые будут удалены, обновлены или добавлены к этой карте.

Каждый раз, когда это происходит, я хочу возвращать к своему представлению с liveata список, который будет точно содержать то, что содержит мой HashMap, но я нахожу это путаницей в том, как преобразовать эти данные в список с преобразованиями

Я пробовал это

val getCart: LiveData<HashMap<String,Cart>> = Transformations.switchMap(cartHashMap, ::someFunc)
    private fun someFunc(myCartHash: HashMap<String,Cart>) = mutableListOf(myCartHash.values)

Но ::someFunc выдает ошибку, я использую switchMap, так как данные будут постоянно меняться и не будут отображаться один раз, Я хочу вернуть только мой обновленный hashmap в виде списка с тем же значением, которое содержит мое hashmap.

Как я могу это сделать?

Спасибо

1 Ответ

0 голосов
/ 21 марта 2020

Решил, сделав так

 val getCart: LiveData<MutableList<Cart>> = Transformations.switchMap(cartHashMap) {
        liveData(context = viewModelScope.coroutineContext + Dispatchers.IO) {
           emit(it.values.toMutableList())
        }
    }
...