【发布时间】:2015-05-04 12:28:27
【问题描述】:
我有以下代码:
public void foo() {
Long[] gData = new Long[] { 1L, 2L };
rx.Observable.from(gData)
.concatMap(data -> {
rx.Observable<GmObject> depositObs1 = depositToUserBalance(data, 1);
rx.Observable<GmObject> depositObs2 = depositToUserBalance(data, 2);
return rx.Observable.zip(depositObs1, depositObs2, (depositObj1, depositObj2) -> {
depositObj1.putNumber("seat_index", data);
depositObj2.putNumber("seat_index", data);
return rx.Observable.merge(
rx.Observable.just(depositObj1),
rx.Observable.just(depositObj2));
})
})
.reduce(new ArrayList<Long>(), (payoutArr, payoutObj) -> {
int seatIndex = ((GmObject) payoutObj).getNumber("seat_index").intValue();
long payout = ((GmObject) payoutObj).getNumber("payout").longValue();
payoutArr.add(seatIndex, payout);
return payoutArr;
})
.subscribe(results -> {
System.out.println(results);
});
}
此代码使用 .zip 向 observables 发出数据,然后添加一个“seat_index”属性并调用 .merge 以使用 .reduce,因此最终所有结果都将聚合到一个 ArrayList 中。
此代码存在问题:当 .reduce 处理其输入时,它会将其作为 Observable 而不是 GmObject ...什么函数可以从其 Observable 包装中“提取” GmObject?
以这种方式使用 rxJava 有意义吗?还是有更好的技术?
谢谢!
【问题讨论】: