java - 在Java中,如何使用流来计算每个数字之间的差异?

标签 java algorithm java-stream

我有一个整数/ 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/

相关文章:

java - 如何在配置 util 字符串中添加 java 变量值 -

algorithm - 大 O 的紧界是什么?

c - 将项目移动到数组的前面

java - NxN 数组仅沿正方向从 (0, 0) 遍历到 (N, N) 的可能路径?

java - Jackson JsonNode 和 Java Streams 返回 Optional Empty

java - Mockito spy 功能

java - 如何让 ThreadSafeClientConnManager 不锁定

java - GC 开销超出限制,但内存剩余

java - 将 Java Stream 过滤为 1 个且仅 1 个元素

java - 使用 lambda 表达式求和成员变量?