Rx java RxJava2,重复直到和whileDo

Rx java RxJava2,重复直到和whileDo,rx-java,rx-java2,Rx Java,Rx Java2,我不确定我是否明白。我想要这样的东西: 从公正的角度创建可观察的 检查情况,如果是真的,则运行所有下游,否则只需完成 重复第二点 这是我的测试可观察到的,它运行到IndexOutOfBoundsException List values=new ArrayList(); 可观察的可观察的=可观察的。只是(值) .repeatUntil(()->values.isEmpty()) .map(整数->值.remove(0)); observable.subscribe(整数->系统输出.printl

我不确定我是否明白。我想要这样的东西:

  • 从公正的角度创建可观察的
  • 检查情况,如果是真的,则运行所有下游,否则只需完成
  • 重复第二点
  • 这是我的测试可观察到的,它运行到IndexOutOfBoundsException

    List values=new ArrayList();
    可观察的可观察的=可观察的。只是(值)
    .repeatUntil(()->values.isEmpty())
    .map(整数->值.remove(0));
    observable.subscribe(整数->系统输出.println(整数),
    throwable->System.out.println(throwable));
    
    在我看来,repeatUntil最终将被第一次执行

    我错了吗?如果我是对的,如何在开始时检查条件

    我还看到,在rxJava1中有whileDo操作符。现在在哪里

    UPD

    我可以在repeatUntil之前使用takeWhile解决这个问题,但也许有更好的解决方案

        List<Integer> values = new ArrayList<Integer>();
        /*
        values.add(0);
        values.add(1);
        values.add(2);
        values.add(3);
        values.add(4);
        */
    
        Observable<Integer> observable = Observable.just(values)
                .takeWhile(integers -> values.size() > 0)
                .map(integers -> values.remove(0))
                .repeatUntil(() -> values.isEmpty());
        observable.subscribe(integer -> System.out.println("Test " + integer), 
                 throwable -> System.out.println(throwable), 
                 () -> System.out.println("Completed"));
    
    List values=new ArrayList();
    /*
    值。添加(0);
    增加(1);
    增加(2);
    增加(3);
    增加(4);
    */
    可观察的可观察的=可观察的。只是(值)
    .takeWhile(整数->值.size()>0)
    .map(整数->值.remove(0))
    .repeatUntil(()->values.isEmpty());
    observable.subscribe(整数->系统输出.println(“测试”+整数),
    可丢弃->系统输出打印项次(可丢弃),
    ()->System.out.println(“已完成”);
    
    RepeatIntil在其上游完成时调用函数,这是在它发出空
    ArrayList
    的信号之后,因此您会得到异常,因为
    删除
    会发现空
    ArrayList

    操作员居住在项目中时,

    List values=new ArrayList();
    语句可流动。whileDo(
    可观察。仅(值),
    ()->values.isEmpty()
    )
    .map(整数->值.remove(0))
    .subscribe(整数)->System.out.println(整数),
    可丢弃->系统输出打印项次(可丢弃))
    ;
    
    RepeatIntil在其上游完成时调用函数,这是在它发出空
    ArrayList
    的信号之后,因此您会得到异常,因为
    删除
    会发现空
    ArrayList

    操作员居住在项目中时,

    List values=new ArrayList();
    语句可流动。whileDo(
    可观察。仅(值),
    ()->values.isEmpty()
    )
    .map(整数->值.remove(0))
    .subscribe(整数)->System.out.println(整数),
    可丢弃->系统输出打印项次(可丢弃))
    ;
    
    rxJava1中的whileDo运算符发生了什么?或者它总是在你的图书馆里?whileDo
    在图书馆里已经将近4年了。该库的发布过程没有正确设置,只需在我自己的存储库中升级到v2就容易多了,该存储库中包含了其他较旧的加载项库内容。如果您想使用标准运算符,您的更新示例就是一个不错的选择。我只是想看看这个在我看来,官方文档中的“RxJava 1––x doWhile repeat whileDo”在我看来,whileDo曾经作为标准运算符存在过。另一句引用自RxJava中的“官方文档”,whileDo不是标准运算符集的一部分,而是可选RxJava计算表达式包的一部分。whileDo在每次重复源序列之前检查一个条件,并且仅在该条件为真时重复该条件。“rxJava1中的whileDo操作符发生了什么?或者它总是在你的图书馆里?whileDo
    在图书馆里已经将近4年了。该库的发布过程没有正确设置,只需在我自己的存储库中升级到v2就容易多了,该存储库中包含了其他较旧的加载项库内容。如果您想使用标准运算符,您的更新示例就是一个不错的选择。我只是想看看这个在我看来,官方文档中的“RxJava 1––x doWhile repeat whileDo”在我看来,whileDo曾经作为标准运算符存在过。另一句引用自RxJava中的“官方文档”,whileDo不是标准运算符集的一部分,而是可选RxJava计算表达式包的一部分。whileDo在每次重复源序列之前检查一个条件,并且仅在该条件为真时重复。”
        List<Integer> values = new ArrayList<Integer>();
        /*
        values.add(0);
        values.add(1);
        values.add(2);
        values.add(3);
        values.add(4);
        */
    
        Observable<Integer> observable = Observable.just(values)
                .takeWhile(integers -> values.size() > 0)
                .map(integers -> values.remove(0))
                .repeatUntil(() -> values.isEmpty());
        observable.subscribe(integer -> System.out.println("Test " + integer), 
                 throwable -> System.out.println(throwable), 
                 () -> System.out.println("Completed"));
    
    List<Integer> values = new ArrayList<Integer>();
    
    StatementFlowable.whileDo(
        Observable.just(values),
        () -> values.isEmpty()
    )
    .map(integers -> values.remove(0))
    .subscribe(integer -> System.out.println(integer), 
          throwable -> System.out.println(throwable))
    ;