【问题标题】:How to do the filter operator from a list of a list in rxjava如何从rxjava中的列表列表中执行过滤器运算符
【发布时间】:2020-02-04 20:28:02
【问题描述】:

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

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

因此,例如,如果用户选择“浴室”类别,我想使用 rxjava 过滤“浴室”类别中的产品列表,如果他们选择“厨房”类别,我想从中获取产品列表“厨房”类别。

这是我迄今为止尝试过的:

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

现在我收到“类型不匹配。要求:Single&lt;MutableList&lt;Product&gt;&gt;,找到:Maybe&lt;MyResponse!&gt;!

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

提前致谢。

问候

【问题讨论】:

  • 您能否澄清service.getProductsByCategories() 返回的类型?此外,无论那种类型是什么,我怀疑它的方法 filter 需要一个返回“事物”列表而不是布尔值(truefalse)的 lambda。
  • 它返回一个Single>,每个类别里面都有一个产品列表。

标签: kotlin rx-java rx-kotlin


【解决方案1】:

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

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

【讨论】:

  • list -> list // list 应该是什么类型?
  • 对,这是 Kotlin。那就{ it }吧。更新了答案。
  • 做了一些小的改动来构建它
  • getProductsByCategories() .flattenAsObservable { it.categoriesList } .filter { it.name == category } .map { it.products } .single( ArrayList() )
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
  • 2017-08-26
相关资源
最近更新 更多