Dictionary 在捕获每个中间结果时,迭代求和值列表的功能性更强的方法是什么?

Dictionary 在捕获每个中间结果时,迭代求和值列表的功能性更强的方法是什么?,dictionary,kotlin,syntax,functional-programming,pure-function,Dictionary,Kotlin,Syntax,Functional Programming,Pure Function,下面的代码按预期工作,但映射lambda不纯净。我如何重构它,使之纯净。(无需坚持调用map,我们可以减少或其他任何内容,我只希望它是纯的) val entries=listOf( 配对(LocalDate.now().minusDays(2),1), 配对(LocalDate.now().minusDays(1),2), 配对(LocalDate.now().minusDays(0),3) ) 私人娱乐建筑时间表(条目:列表):地图{ var runningSum=0.0 返回条目.sorte

下面的代码按预期工作,但映射lambda不纯净。我如何重构它,使之纯净。(无需坚持调用map,我们可以减少或其他任何内容,我只希望它是纯的)

val entries=listOf(
配对(LocalDate.now().minusDays(2),1),
配对(LocalDate.now().minusDays(1),2),
配对(LocalDate.now().minusDays(0),3)
)
私人娱乐建筑时间表(条目:列表):地图{
var runningSum=0.0
返回条目.sortedBy{it.first}.map{
runningSum+=it.second
it.copy(秒=runningSum)
}.toMap()
}
val sumSchedule=buildSumSchedule(条目)

您需要的是
scanReduce
这就是排序后使用上一项的方式

@ExperimentalStdlibApi
private fun buildSumSchedule(entries: List<Pair<LocalDate, Double>>): Map<LocalDate, Double> =
    entries.sortedBy { it.first }.scanReduce { pair, acc ->
        acc.copy(second = pair.second + acc.second)
    }.toMap()

看起来
scanReduce
已经被弃用,取而代之的是
runningReduce
Ooh我很高兴他们在发布之前改进了该函数的名称!
private fun buildSumSchedule(entries: List<Pair<LocalDate, Double>>): Map<LocalDate, Double> =
    entries.sortedBy { it.first }.runningReduce{acc, pair ->
        acc.copy(second = pair.second + acc.second)
    }.toMap()