如何从rxjava中的列表中执行过滤操作符

问题描述 投票:1回答:1

下午好。所以我得到了一个列表,里面是这样的列表:

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

因此,例如,如果用户选择类别“ Bathroom”,我想使用rxjava来过滤类别“ Bathroom”中的产品列表,如果他们选择类别“ Kitchen”,则要从类别“厨房”。

这是我到目前为止尝试过的:

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

为什么会这样?正确的过滤方法是什么?

提前感谢。

问候

kotlin rx-java rx-kotlin
1个回答
0
投票

您可以展开getProductsByCategories响应,过滤正确的类别,在产品列表中进行映射,然后将其转换为所需的输出类型:

getProductsByCategories()
.flattenAsObservable { it }
.filter { it.name == category.name }
.map { it.products }
.single( ArrayList<Product>() )
© www.soinside.com 2019 - 2024. All rights reserved.