我有一个整数/ double 列表。我想计算每个元素与其下一个元素之间的差异。然后将差异加在一起。 例如(伪代码):
List<Integer> nums = {1, 2, 3, 1, -5}
本例中的差值应为“-1”、“-1”、“2”和“6”,加在一起应为“6”。
但 forEach() 或其他操作不应该用在 List
上类型,我应该使用类似
nums.stream()...
这样的事情就完成了操作。那可能吗?如果不是,最简单的方法应该是什么? 我尝试过例如
stream().reduce(...)
但实际上不知道如何继续。 真的很感谢您的帮助!
最佳答案
您可以创建索引的 IntStream
:
IntStream.range(0,nums.size()-1)
.map(i -> nums.get(i) - nums.get(i+1))
.sum();
当然,您也可以观察到所有差异的总和是第一个元素减去最后一个元素。
如果要将差异拆分为正差异的 List
和负差异的 List
,可以使用 partitioningBy
:
Map<Boolean,List<Integer>> partition =
IntStream.range(0,nums.size()-1)
.map(i -> nums.get(i) - nums.get(i+1))
.boxed()
.collect(Collectors.partitioningBy (i -> i >= 0));
您还可以计算正数和负数:
Map<Boolean,Integer> partitionSums =
IntStream.range(0,nums.size()-1)
.map(i -> nums.get(i) - nums.get(i+1))
.boxed()
.collect(Collectors.partitioningBy (i -> i >= 0,
Collectors.summingInt (Integer::intValue)));
关于java - 在Java中,如何使用流来计算每个数字之间的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59444434/