【发布时间】:2017-07-29 01:26:08
【问题描述】:
每个人。
我遇到了一项任务,对我来说看起来很简单,但我花了大约 4 个小时却一无所获。所以,让我们假设我们有一个简单的整数列表,比如
[1, 2, 3, 4, 5]
我想得到每个元素的减法总和 - 对于这个列表,它将等于 4 -> (2 - 1) + (3 - 2)... 等等。
为了避免使用范围的答案,列表可能如下所示:
[5, 12, 16, 25, 25, 48]
它总是在增长,但两者之间的范围不同。
使用简单的 for 不难得到类似的东西:
int result = 0;
for (int i = 1; i < lst.size(); i++) {
result += lst.get(i) - lst.get(i-1);
}
但是当我尝试使用流解决这个案例时,我觉得自己完全愚蠢。
这真的可能吗?
【问题讨论】:
-
你计算的只是
lst.get(lst.size()-1) - lst.get(0)——最后一个元素减去第一个元素。 -
流设计用于一次处理一个项目。您想要处理项目并包括其邻居的上下文。使用流并非不可能完成,但同样没有理由使用它们。
-
@Michael 如果列表为
[1,2,3,4,1],则结果为0,仍然是最后一个元素减去第一个元素。 -
@Michael (2-1) + (3-2) + (4-3) + (1-4) 等于 0,所以 khelwood 的解决方案仍然有效
-
@khelwood 原来如此。数学不好。
标签: java java-8 java-stream