大家。
我已经面临一项任务,对我来说看起来很简单,但我花了4个小时而一无所有。所以,我们假设我们有简单的整数列表,如
[1, 2, 3, 4, 5]
我希望得到每个元素的减法总和 - 对于这个列表,它将等于4 - > (2 - 1)+(3 - 2)......依此类推。
为了避免使用范围答案,列表可能如下所示:
[5, 12, 16, 25, 25, 48]
它一直在增长,但两者之间的范围不一样。
使用简单的 它不难得到类似的东西:
int result = 0;
for (int i = 1; i < lst.size(); i++) {
result += lst.get(i) - lst.get(i-1);
}
但是当我尝试使用流来解决这种情况时,我感觉自己完全愚蠢。
这实际上可行吗?
答案 0 :(得分:4)
假设您有一个像这样的整数列表:[ n0, n1, n2, ... , nM, nN ]
,您正在做的是:
[(n1 - n0), (n2 - n1), (n3 - n2), ..., (nN - nM)]
。 X = (n1 - n0) + (n2 - n1) + (n3 - n2) + ... + (nN - nM)
。
这是完全相同的(只是交换了括号内部,因为它们无关紧要)为X = (-n0) + (n1 - n1) + (n2 - n2) + ... + (nM - nM) + nN ]
。(正如其他人指出的那样)X = nN - n0
。 无论您的列表中有什么内容( null 除外)。
因此,到目前为止,lst.get(lst.size()-1) - lst.get(0)
是最佳答案。
答案 1 :(得分:2)
尝试使用:
int result = IntStream.range(1, lst.size()) // creates a stream of indexes from 1 to lst.size()
.map(i -> lst.get(i) - lst.get(i-1)) // maps the new value into a new stream
.sum(); // sums it up