【问题标题】:Rxjava - Iterate the list with batchRxjava - 用批处理迭代列表
【发布时间】:2019-03-29 06:45:11
【问题描述】:

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

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】:

    用户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。在 Buffer 的各种特定语言实现中存在许多变体,它们在选择哪些项目进入哪些缓冲区方面有所不同。

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

    【讨论】:

    • 除非这背后有一些真正的用例,否则我认为使用 rxjava 来达到目的有点过头了。
    • 是的,但我敢肯定他/她一定在他/她的问题中使用了类比 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多