如何将一个可流动列表转换为新的可流动列表,其中包含上一项的累积和



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

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

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不是一个Flowable项目列表?我把它作为单位的单一列表。或者这不是正确的转变方式。

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

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

firstObservable.flatMapIterable{list -> list} // This will be converted to Flowable<Items>

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

var secondObservale: Flowable<List<Items>> = firstObservable
.doOnNext {
it.fold(0.0) { acc, items ->
items.totalQty = acc + items.qty
items.totalQty
}
}

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

更新

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

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()

相关内容

  • 没有找到相关文章

最新更新