Rxjava - 使用批处理迭代列表

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

我有一些字符串的列表,我需要批量迭代列表。 示例:

val list = ["a","b","c","d","e","f"]
Observable.fromIteratable(list)
          .map{
          //here i need to get 4 items at a time
          //like in first iteration i need to get ["a","b","c","d"]
          //in second iteration i need to get ["e","f"]
        }

是否有任何选项可以执行此操作?

android rx-java rx-java2 rx-kotlin
1个回答
1
投票

用户buffer

定期将Observable发出的项目收集到束中并发出这些束,而不是一次发送一个项目

 val list = arrayOf("1", "2", "3", "4", "5")
 Observable.fromIterable(list.asIterable())
     .buffer(4)
     .map { stringList: MutableList<String> ->
       println("insideMap -> $stringList")
       return@map "wow $stringList"
     }
     .subscribe { value: String -> println("OnResult $value")}
//Output
insideMap -> [1, 2, 3, 4]
OnResult wow [1, 2, 3, 4]
insideMap -> [5]
OnResult wow [5]

Buffer运算符将一个Observable转换为一个Observable,该Observable将发出这些项的缓冲集合。 Buffer的各种特定于语言的实现中有许多变体,它们在哪些项目选择哪些缓冲区方面有所不同。

请注意,如果源Observable发出onError通知,则Buffer会立即传递此通知,而不会先发出正在组装过程中的缓冲区,即使该缓冲区包含源Observable在发出错误通知之前发出的项目。

© www.soinside.com 2019 - 2024. All rights reserved.