如何根据流中的元素动态划分连续的RXJava流?
最简单的示例是如下所示的字符串流:如何根据流中的元素动态划分连续的RXJava流?,java,rx-java,rx-java2,Java,Rx Java,Rx Java2,最简单的示例是如下所示的字符串流: [“3”、“a”、“b”、“c”、“1”、“a”、“2”、“a”、“b”] 这些数字描述了它的组还应该包含多少元素 非常重要的是,流是连续的,所以我们不能只等待下一个数字来分割流 据我所知,RXJava2中没有内置的功能 var flowable=flowable.concat(flowable.fromArray(“3”、“a”、“b”、“c”、“1”、“a”、“2”、“a”、“b”),flowable.never()); 可流动/*此处某物*/.bloc
[“3”、“a”、“b”、“c”、“1”、“a”、“2”、“a”、“b”]
这些数字描述了它的组还应该包含多少元素
非常重要的是,流是连续的,所以我们不能只等待下一个数字来分割流
据我所知,RXJava2中没有内置的功能
var flowable=flowable.concat(flowable.fromArray(“3”、“a”、“b”、“c”、“1”、“a”、“2”、“a”、“b”),flowable.never());
可流动/*此处某物*/.blockingSubscribe(System.out::println);
预期产出将是:
[3, a, b, c]
[1, a]
[2, a, b]
我后来找到了阿卡诺克的包裹。利用这一点,我能够构建这个,它实现了我想要的:
var flowable=flowable.concat(flowable.fromArray(“3”,“a”,“b”,“c”,“1”,“a”,“2”,“a”,“b”),flowable.never());
flowable.compose(flowabletranformers.bufferUntil)(新谓词(){
私有整数剩余=0;
@凌驾
公共布尔测试(字符串下一步){
if(next.chars().allMatch(Character::isDigit)){
剩余=整数.parseInt(下一个);
}
return——剩余<0;
}
})).blockingSubscribe(System.out::println);
需要注意的是,您构建的Flowable是不可重用的。若要重复使用,剩余的
字段需要按订阅进行设置。defer
操作符提供您需要的:Flowable.defer(()->Flowable.compose(…)