Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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
Java 以函数方式计算列表中的差异_Java_Kotlin_Functional Programming - Fatal编程技术网

Java 以函数方式计算列表中的差异

Java 以函数方式计算列表中的差异,java,kotlin,functional-programming,Java,Kotlin,Functional Programming,我有一个绝对值列表(例如:10、50、30),我想用函数的方式将其转换为这些数字之间差异的列表。因此,假设输入为10,50,30,我希望结果是:40,-20 对于上下文:我当前的实现只是一个For循环,它跟踪以前的值,计算差异,并将其添加到一个新列表中,但我想知道如何以更实用的方式解决这个问题?(我正在使用Kotlin,但Java解决方案也可以)使用 传入一个lambda,其中包含2个参数zipWithNext将遍历列表并将每对元素传递给lambda。要计算差值,只需减去: val list =

我有一个绝对值列表(例如:10、50、30),我想用函数的方式将其转换为这些数字之间差异的列表。因此,假设输入为
10,50,30
,我希望结果是:
40,-20

对于上下文:我当前的实现只是一个For循环,它跟踪以前的值,计算差异,并将其添加到一个新列表中,但我想知道如何以更实用的方式解决这个问题?(我正在使用Kotlin,但Java解决方案也可以)

使用

传入一个lambda,其中包含2个参数
zipWithNext
将遍历列表并将每对元素传递给lambda。要计算差值,只需减去:

val list = listOf(10, 50, 30)
val result = list.zipWithNext { a, b -> b - a }

我想,它应该是
val result=list.zipWithNext{a,b->b-a}
啊,压缩,我不知道那一个,我正在查看reduce/folds!谢谢,那正是我想要的@ErikPragt如果您不知道,
zip
通常需要两个(有时更多)集合,并将每个集合中的一个元素交给您,因此这是一种很好的方式来组合和处理相关的内容
zipWithNext
是一种特殊情况,它使用相同的集合从序列中为您提供对,但是一般来说,
zip
是一个很好的例子!如果你想在一个集合上使用滑动窗口,但是有两个以上的项目(虽然不如
zipWithNext
方便),还有
windowed
。@cactustictas我知道zip,我想我不知道你可以像
zipWithNext
一样在同一个集合上应用它,但我不知道
windowed
,我也不确定这将是一个什么样的用例。你能举个例子吗?@ErikPragt是的,你可以只做
stuff.zip(stuff.drop(1)){a,b->随便什么}
,你只需要压缩两个迭代器,但是
zipWithNext
是一个常见的用例,所以他们为你做了<代码>窗口化功能更强大,因为您可以一次处理更多元素,并控制步骤。因此,你可以,比方说,用ABC、BCD、CDE等做一个
zipWithNextTwo
的事情(可能是为了计算滚动平均值),或者用窗口大小的步长、ABCD、EFGH等(也有一个名为
chunked
的简单函数,但你对它的控制力较小)