使用Java流API的减法和
各位 我面临着一项任务,对我来说很简单,但我花了大约4个小时,什么都没有离开。假设我们有一个简单的整数列表,比如使用Java流API的减法和,java,java-8,java-stream,Java,Java 8,Java Stream,各位 我面临着一项任务,对我来说很简单,但我花了大约4个小时,什么都没有离开。假设我们有一个简单的整数列表,比如 [1,2,3,4,5] 我想得到每个元素的减法之和——对于这个列表,它将等于4->(2-1)+(3-2)。。。等等 为了避免回答带有范围的问题,列表可能如下所示: [5,12,16,25,25,48] 它总是在增长,但两者之间的范围不同 使用simple for不难获得以下内容: int result = 0; for (int i = 1; i < lst.s
[1,2,3,4,5]
我想得到每个元素的减法之和——对于这个列表,它将等于4->(2-1)+(3-2)。。。等等
为了避免回答带有范围的问题,列表可能如下所示:
[5,12,16,25,25,48]
它总是在增长,但两者之间的范围不同
使用simple for不难获得以下内容:
int result = 0;
for (int i = 1; i < lst.size(); i++) {
result += lst.get(i) - lst.get(i-1);
}
int结果=0;
对于(inti=1;i
但当我试图用streams来解决这个问题时,我觉得自己非常愚蠢
这真的可能吗 尝试使用以下方法:
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
假设您有这样一个整数列表:
[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
无论列表中有什么内容(空值除外)
因此,到目前为止,
lst.get(lst.size()-1)-lst.get(0)
是最好的答案。这基本上只是一个奇怪的查找循环。我用另一个列表示例编辑了这个问题。@AlbertZoich我的示例仍然很好,因为生成的intStream只包含指示您正在计算的是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的解仍然是works@khelwood的确如此。糟糕的数学。是的,我明白了。非常感谢。