Возврат объекта карты методом DAO - PullRequest
0 голосов
/ 01 сентября 2018

Я хотел бы иметь такой метод в моем объекте dao

@Query("SELECT c.name, sum(p.value) FROM payments p, paymentCategories c WHERE p.categoryId = c.id GROUP BY c.name")
fun getCategoryStats(): Map<String, Float>

но я получаю ошибку

ошибка: не уверен, как преобразовать курсор в тип возвращаемого значения этого метода публичная аннотация java.util.Map

Можно ли изменить его на рабочую версию?

Так что это может быть другой тип для возврата, но основные условия

  1. Это должен быть только один запрос в дБ
  2. Я бы хотел избежать лишнего кода, например создания дополнительной структуры данных только для этого метода

1 Ответ

0 голосов
/ 27 мая 2019

Хотя я не думаю, что это можно сделать в Dao, это легко сделать при запросе LiveData в репозитории или viewModel (или там, где вы запрашиваете список), используя преобразование. Поскольку я не знаю ваших данных, я использую вымышленные:

val categoryStatsMap: LiveData<Map<String, Float>> = 
    Transformations.map(
        database.categoryStatsDao.getCategoryStats()) {it ->
            it.map {it.key to it.value}.toMap()
}

'it.key' и 'it.value' - это поля в объекте сущности, которые вы хотите использовать как ... пары ключей и значений на карте. Преобразования дают вам живой объект данных, основанный на другом реальном объекте данных. Я не знаю, что такое накладные расходы, но я предполагаю, что они не должны быть слишком большими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...