我有一个数字列表,每个数字都代表一个索引。
我想一张一张地浏览清单,每一个数字都会发出一个可观察到的信息。

我怎样才能做到这一点?

我有这个摘要,但是我在理解如何继续方面遇到了麻烦。

List<Short> seats = Arrays.asList(new Short[]{0,2,3,1});
rx.Observable.from(seats).takeWhileWithIndex((seatIdx, idx) -> {
    // Here I would like to emit an Observable
    updateGame(seatIdx, idx == 0 ? true : false)
    .subscribe(results -> {
        System.out.println(results);
    });
    return !seats.isEmpty();
}).subscribe();


必须有更好的方法来做到这一点...

如果您有任何想法...
谢谢!

编辑

我想更进一步,在省略4次迭代的循环(我不在乎其结果)之后,我想继续进行链接,并连接更多的Observables。

List<Short> seats = Arrays.asList(new Short[]{0,2,3,1});
rx.Observable.range(0, seats.size())
     .zipWith(seats, (idx, seatIdx) -> {
        return updateGame(seatIdx, idx == 0 ? true : false);
     })
     .takeLast(1)
     .flatMap(x -> x)
     .concatWith(calculatePayout(...))
     .concatWith(persistGame(...))
     .subscribe(results -> {
        System.out.println(results);
     }, e -> {

     }, () -> {
       System.out.println("COMPLETED");
     });


注意,为了避免调用4次“ calculatePay”,我使用了“ takeLast(1)”! -有更优雅的方法吗?

最佳答案

zipIterable可以满足您的需求:

List<Short> seats = Arrays.asList(new Short[]{0,2,3,1});
Observable.range(0, seats.size())
    .zipWith(seats,
            (idx, seatIdx) ->
                updateGame(seatIdx, idx == 0 ? true : false))
    .flatMap(x -> x)
    .doOnNext(System.out::println)
    .subscribe();

关于java - 使用takeWhileWithIndex遍历索引数组,然后发出可观察到的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31622332/

10-10 23:59