为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据流中的元素动态划分连续的 RXJava 流?

如何根据流中的元素动态划分连续的 RXJava 流?

慕仙森 2022-09-22 20:05:27

最简单的例子是像这样的字符串流:


["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());


flowable/*Something here*/.blockingSubscribe(System.out::println);

预期的输出将是:


[3, a, b, c]

[1, a]

[2, a, b]


查看完整描述

1 回答

?
catspeake

TA贡献766条经验 获得超0个赞

我后来发现了阿卡诺克的RxJava2扩展包。使用它,我能够构建这个,它可以做我想要的:

var flowable = Flowable.concat(Flowable.fromArray("3", "a", "b", "c", "1", "a", "2", "a", "b"), Flowable.never());

flowable.compose(FlowableTransformers.bufferUntil(new Predicate<>() {

    private int remaining = 0;

    @Override

    public boolean test(String next) {

        if(next.chars().allMatch(Character::isDigit)) {

            remaining = Integer.parseInt(next);

        }

        return --remaining < 0;

    }

})).blockingSubscribe(System.out::println);


查看完整回答
反对 回复 2022-09-22

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信