代码之家  ›  专栏  ›  技术社区  ›  erluxman

Observable#take(Long)未返回RxJava中所需的项目大小

  •  1
  • erluxman  · 技术社区  · 6 年前

    Observable#take() 从列表中获取前50项。但是 #take()

    在Rx文档中, #拿() 定义如下:

    “仅发射可观测对象发射的前n项”

    enter image description here

    我们可以看到 pageSize 争论是 50

    enter image description here

    size list 300

    enter image description here

    #take(50) 也适用于此 Observable 在下一个断点,我仍然得到 全尺寸 列表 i.e. size = 300

    enter image description here

    但是 just for the check smaller list 具有 9 #displayName field .

    enter image description here

    我相信 RxJava/Kotlin's #take()

    2 回复  |  直到 6 年前
        1
  •  5
  •   akarnokd    6 年前

    take 行为正确,因为它只会给你50分 List<FollowersEntry> “弹珠”。根据你的截图和措辞,我猜你想要50张 FollowersEntry List<> 但它无法知道您打算使用的嵌套对象。

    因此,您必须使用 it.take(50) 在…内 map flatMapIterable :

    getFollowers()
    .flatMapIterable(entry -> entry)
    .take(50 /* entries this time, not lists */)
    
        2
  •  3
  •   Leo Aso    6 年前

    Single<List<FollowersEntity>> . 可观察到的从 remoteFollowersService.getFollowers() 一个可观察到的发射300毫米的物体 FollowersEntity 项目-它是一个可观测的,发出 单一的 项目,并且该单个项目是 List 项目。换句话说,你需要在列表上调用take,而不是在可观察对象上。

        return remoteFollowersService.getFollowers()
            .map { val size = it.size; it } // for debugging
            .map { it.take(pageSize) }
            .map { val size = it.size; it } // for debugging
            .map { it.filter { item -> item.displayName.contains("9") } }
            .single(emptyList())