我有一个交易 list 。每笔交易都有货币和金额信息等。我想创建一个持有列表,所以当前持有的货币数量。我从 groupBy() 开始,然后继续减少。看来我必须先订阅才能对结果做任何事情,因为这会给我一个错误:
Observable.fromIterable(transactions)
.groupBy(Transaction::getCurrency)
.flatMap(t -> t.reduce(new Holding(t.getKey()), (holding, transaction) -> holding.addTransaction(transaction.getAmount()))
它说“不存在类型变量 R 的实例,因此 Single 符合 ObservableSource< ? extends 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 的组合属性。
关于android - 如何在 RxJava 2 中的 groupBy 之后获取列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45269200/