Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用上一项的累计和将可流动列表转换为新的可流动列表_Android_Kotlin_Rx Java_Rx Android - Fatal编程技术网

Android 如何使用上一项的累计和将可流动列表转换为新的可流动列表

Android 如何使用上一项的累计和将可流动列表转换为新的可流动列表,android,kotlin,rx-java,rx-android,Android,Kotlin,Rx Java,Rx Android,这是非常基本的,但我对RxJava非常陌生,无法为我的查询找到合适的解决方案 查询就像,我得到了一个可流动的列表(单流),并希望再次将其转换为新的可流动的(不是逐项可观察的),作为初始列表。在转换为新的可流动列表时,每个项目都应该具有最后项目的累积和 var cumulativeSum: Double = 0.0 var firstObservable: Flowable<List<Items>> = repo.getQuery() var secondObservale

这是非常基本的,但我对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()
var累积量um:Double=0.0
var firstObservable:Flowable=repo.getQuery()
var secondObservale:可流动=第一个可观察。
.flatmailable{list->list}
.map{item->
累积量SUM+=it.qty
it.totalQty=累积量
}
托利斯先生()
如果有人能帮我解决上述问题,为什么secondObservable不是一个可流动的项目列表?我得到它作为单一的单位清单。 或者这不是正确的转换方式


请帮助我,我如何才能达到预期的结果。

如果您使用
flatMap
series api,它将使您的数据平坦化,您可能会丢失初始列表

firstObservable.flatMapIterable{list -> list} // This will be converted to Flowable<Items>
如果我有什么问题,请告诉我

更新

我认为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()
var secondObservale:Flowable=firstObservable
.parallel(4)//最大并发数:4
.runOn(Schedulers.computation())
doOnNext先生{
it.fold(0.0){acc,items->
items.totalQty=附件+items.qty
项目总数
}
}


谢谢@Minseong,这很有效。我对doOnNext和onNext感到困惑。这似乎是一个中间步骤。所以这种变化将发生在i.o线程(subscribober)本身上。@AnshulKabra,我很高兴这个答案是您想要的。如果要同时运行代码,请检查更新的代码。
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()