RxJava:如何从源可观察对象中提取块?

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

我有

[1,2,3,2,4,5,0,2,1,3,4,5,2,2,1,4,5]

我想要的输出是

[[1,2,3,2,4,5],[1,3,4,5],[1,4,5]]

这意味着我想从输入序列中提取带有一些开始标记(此处为

1
)和一些结束标记(此处为
5
)的块。 这些块之间的元素将被忽略。

是否有可读的

rx-java
运算符组合来实现此目的?

rx-java partitioning reactive-streams
1个回答
0
投票

是的。您需要使用

buffer
运算符来获取开始和结束指示符。由于元素本身就是指标,因此您必须
publish
原始序列并将它们也汇集到指标中。

Observable
.fromArray(1, 2, 3, 2, 4, 5, 0, 2, 1, 3, 4, 5, 2, 2, 1, 4, 5)
.publish(v -> 
    v.buffer(
        v.filter(w -> w == 1), 
        u -> v.filter(w -> w == 5)
    )
)
.subscribe(System.out::println);
© www.soinside.com 2019 - 2024. All rights reserved.