Как сделать оператор фильтра из списка в rxjava - PullRequest
1 голос
/ 04 февраля 2020

Добрый день. Итак, я получил список со списком внутри:

    {
  "category" : [
    {
      "name": "Bathroom",
      "products": [
        {
          "name": "Sink01"
        },
        {
          "name": "Shower01"
        }
      ]
    },{
      "name": "Kitchen",
      "products": [
        {
          "name": "Table"
        },
        {
          "name": "Stove"
        }
      ]
    }
  ]
}

Так что, если пользователь, например, выбирает категорию «Ванная комната», я хочу использовать rx java, чтобы отфильтровать список товаров из категории. «Ванная комната», и если они выбирают категорию «Кухня», я хочу получить список продуктов из категории «Кухня».

Это то, что я пробовал до сих пор:

    fun getProducts(category: Category): Single<MutableList<Product>> {
         return service.getProductsByCategories().filter{ response ->
             response.categoriesList.forEach {
                if (it.name == category.name) {
                  category.products
                }
             }
         }
    }

Прямо сейчас я получаю "Несоответствие типографских данных. Требования: Single<MutableList<Product>>, Найдено: Maybe<MyResponse!>!"

Почему это происходит? Как правильно фильтровать?

Заранее спасибо.

Привет

1 Ответ

1 голос
/ 06 февраля 2020

Вы можете развернуть ответ getProductsByCategories, отфильтровать нужную категорию, отобразить в списке продуктов, а затем преобразовать его в нужный тип вывода:

getProductsByCategories()
.flattenAsObservable { it }
.filter { it.name == category.name }
.map { it.products }
.single( ArrayList<Product>() )
...