首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何用前一项的累加和将可流动列表转换为新的可流动列表

如何用前一项的累加和将可流动列表转换为新的可流动列表
EN

Stack Overflow用户
提问于 2020-10-12 21:01:57
回答 1查看 445关注 0票数 0

这是非常基本的,但我对RxJava非常陌生,无法为我所拥有的查询找到合适的解决方案。

查询就像,我得到了一个可流动的列表(单个流),并希望再次将其转换为新的可流动(而不是逐项可观察到),作为初始列表。在转换为新的可流动列表时,每个项目都应该有最后项的累积和。

代码语言:javascript
运行
AI代码解释
复制
var cumulativeSum: Double = 0.0
var firstObservable: Flowable<List<Items>> = repo.getQuery()
var secondObservale: Flowable<List<Items>> = firstObservable.
.flatMapIterable{list -> list}
.map{ item ->
      cumulativeSum += it.qty
      it.totalQty = cumulativeSum
 }
.toList()

如果有人可以帮助我进行上述查询,为什么secondObservable不是一个可流动的项目列表?我把它作为一份单子单子。或者这不是改变的正确方式。

请帮助我,我怎样才能达到预期的效果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-12 22:34:43

如果您使用flatMap系列api,它会使您的数据变平,您可能会丢失初始列表。

代码语言:javascript
运行
AI代码解释
复制
firstObservable.flatMapIterable{list -> list} // This will be converted to Flowable<Items>

此外,map()运算符可以将您的对象转换为其他对象。如果您只想保留Items对象,并且只想更改内部变量,请使用'doOnXXX()‘操作符。

代码语言:javascript
运行
AI代码解释
复制
var secondObservale: Flowable<List<Items>> = firstObservable
    .doOnNext {
        it.fold(0.0) { acc, items ->
            items.totalQty = acc + items.qty
            items.totalQty
        }
    }

如果我有什么问题请告诉我。

更新

我认为RxJava的核心功能是并发性。我不确定这个场景是否是您想要的,但是如果您想同时运行每个任务,请尝试下面的代码。

代码语言:javascript
运行
AI代码解释
复制
var secondObservale: Flowable<List<Items>> = firstObservable
    .parallel(4) // max concurrency: 4
    .runOn(Schedulers.computation())
    .doOnNext {
        it.fold(0.0) { acc, items ->
            items.totalQty = acc + items.qty
            items.totalQty
        }
    }
    .sequential()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64328803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档