我有一个数字列表,每个数字都代表一个索引。
我想一张一张地浏览清单,每一个数字都会发出一个可观察到的信息。
我怎样才能做到这一点?
我有这个摘要,但是我在理解如何继续方面遇到了麻烦。
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)”! -有更优雅的方法吗?
最佳答案
zip
和Iterable
可以满足您的需求:
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/