我有一個交易列表。每筆交易都有貨幣和金額信息等等。我想創建一個持股清單,所以貨幣持有當前的金額。我從groupBy()開始並繼續減少。看來我要訂閱之前,我可以做的結果什麼,因爲這給了我一個錯誤:如何在RxJava 2中的groupBy之後獲取列表?
Observable.fromIterable(transactions)
.groupBy(Transaction::getCurrency)
.flatMap(t -> t.reduce(new Holding(t.getKey()), (holding, transaction) -> holding.addTransaction(transaction.getAmount()))
它說:「沒有任何類型的實例變量R存在使單符合ObservableSource <延伸R> 」。
在另一方面,如果我試試這個:
Observable.fromIterable(transactions)
.groupBy(Transaction::getCurrency)
.subscribe((GroupedObservable<String, Transaction> r) -> r.reduce(new Holding(r.getKey()), (holding, transaction) -> holding.addTransaction(transaction.getAmount()))
.toObservable()
.subscribe(t -> {
//t is a single Holding.
}
));
我不能讓一個列表,因爲我已經訂閱了分組流。我可以把它加起來,但我確信有一個更優雅的解決方案,但我無法弄清楚。基於akarnokd的回答
解決方案:
Observable.fromIterable(transactions)
.groupBy(Transaction::getCurrency)
.flatMapSingle(Observable::toList)
.map(Holding::new)
.toList()
.subscribe(holdings -> {
whatever(holdings);
});
嘗試'flatMapSingle'工作。另外,從onNext處理程序中訂閱是一種糟糕的做法,因爲您失去了RxJava的組合屬性。 – akarnokd
@akarnokd做到了。我甚至不需要減少。你會發佈一個答案,或者我應該嗎? – Herrbert74