android - 如何在 RxJava 2 中的 groupBy 之后获取列表?

标签 android rx-java2

我有一个交易 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/

相关文章:

java - 无法一次从节点 "History"获取一个 key

java - 如何在 Firebase Android 中执行查询 SQL IN 子句

android - 我们可以在调度程序上运行的 Observable 数量是否有限制?

java - RxJava 棘手的 startWith(Observable)

java - 有没有办法在< 21 API上实现计划任务?

android - 重新启动 Activity 中的 fragment

java - 从多个请求中获取带有 id 和响应正文的 map

rx-java - RxJava 缓冲区直到更改

java - 如何限制Single.Zip并行度?

android - 找不到变量:在构建时 react