RxJava拆分列表进入分区

时间:2018-05-17 15:43:35

标签: java android rx-java

如何创建大列表的分块列表

窗口:

Observable.just(mutableListOf(1,2,3,4,5,6))
                .window(2)
                .flatMap { chunk -> chunk }
                .map { chunk -> println("This is a chunk of 2 numbers -> ${chunk}") }
                .subscribe()

结果This is a chunk of 2 numbers -> [1, 2, 3, 4, 5, 6]

为什么呢?我的意思是,为什么不打印3次(3个列表每个包含2个数字)

和缓冲区

Observable.just(mutableListOf(1,2,3,4,5,6))
                .buffer(2)
                .flatMap { chunk -> Observable.just(chunk) }
                .map { chunk -> println("This is a chunk of 2 numbers -> ${chunk}") }
                .subscribe()

缓冲区的结果 - > This is a chunk of 2 numbers -> [[1, 2, 3, 4, 5, 6]]

除了为2个数字组创建更多列表之外,这个几乎已经做了:O =(

有些亮点?

2 个答案:

答案 0 :(得分:0)

Observable.just为您提供一个元素的流(列表)。您应该使用Observable.from

答案 1 :(得分:0)

可以使用 Rxjava2缓冲区

  • 缓冲区->定期将Observable发出的项目收集成束,然后发出这些束,而不是一次发出一个物品

这是获取它的代码。

Observable.fromIterable(mutableListOf(1,2,3,4,5,6))
        .buffer(2, 2) 
        // First param: 2 means,  it takes max of 2 from its start index and create list 
        // seconds param 2 means, it jumps two step every time
        .map { chunk -> println("This is a chunk of 2 numbers -> ${chunk}") }
        .subscribe()

在执行上述代码时,它给出3个列表。每个列表中包含2个项目。

  

这是2个数字的块-> {1,2}

     

这是2个数字的大块-> {3,4}

     

这是由2个数字组成的块-> {5,6}