我有一个数字列表,每个数字代表一个索引。 我想逐个查看列表,每个数字都会发出一个可观察的数据。
我该怎么做?
我有这个片段,但我很难理解如何继续......
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次迭代的循环后(我不关心它的结果),我想继续使用链并连接更多的Observable。
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");
});
注意,我使用'takeLast(1)'以避免4次调用'calculatePay'! - 有更优雅的方式吗?
答案 0 :(得分: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();