案例分析:遍历map 内部元素相加
20240912 写在前面:造轮子 有什么不好呢?我造了轮子,你造了发动机,他造了车身铁皮,我们组装一下就可以上路了,不是吗?走,开路!
问题:
最近开发中遇到一个问题,就是多设备 Long 对应了一组数据 Double[],Double[]又是个多列数组,但是列数相同。期望是将Double[]相同列的值求和合并,并输出一个 求和后的Double[]
简单的说就是:
遍历Map<Long, Double[]> devPowerMap 将其中的double[]相同索引的相加 输出一个新的Double。
…大家先思考一下…试试自己有咩有答案。
one ti
程序员暑假作业课后答案[狗头]:
我们的目的是遍历 Map<Long, Double[]>
,并将其中每个 double[]
的相同索引的值相加,那么可以通过以下步骤实现:
- 初始化一个结果数组,长度与 Double[] 相同,用来存储每个索引的总和。
- 遍历
Map<Long, Double[]>
中的每个Double[]
,将相同索引的值进行相加。 - 输出总和的结果数组。
实现代码:
package com.javastudy.springboot3framework.myapp.tools;import java.util.HashMap;
import java.util.Map;/*** @author zhizhou 2024/9/12 22:45*/
public class SumMapValues {public static void main(String[] args) {// 初始化Map<Long, Double[]>Map<Long, Double[]> devPowerMap = new HashMap<>();devPowerMap.put(1L, new Double[]{1.0, 2.0, 3.0, 4.0, 5.0});devPowerMap.put(2L, new Double[]{6.0, 7.0, 8.0, 9.0, 10.0});devPowerMap.put(3L, new Double[]{11.0, 12.0, 13.0, 14.0, 15.0});// 假设所有 Double[] 的长度相同,初始化一个总和数组int length = devPowerMap.values().iterator().next().length; // 获取数组长度Double[] totalSums = new Double[length];// 初始化 totalSums 数组为0for (int i = 0; i < length; i++) {totalSums[i] = 0.0;}// 遍历 Map,累加相同索引的值for (Map.Entry<Long, Double[]> entry : devPowerMap.entrySet()) {Double[] values = entry.getValue();for (int i = 0; i < values.length; i++) {totalSums[i] += values[i];}}// 输出每个索引相加后的总和System.out.println("每个索引值的和:");for (int i = 0; i < totalSums.length; i++) {System.out.println("索引 " + i + " 对应值之和: " + totalSums[i]);}}
}
代码说明:
devPowerMap
:一个Map<Long, Double[]>
,键为设备ID,值为Double[]
。totalSums
:一个数组,用来存储相同索引位置的累加结果。它的长度是从Map
中取的第一个Double[]
的长度。- 遍历逻辑:
- 遍历
Map
中的每个Double[]
,将其相同索引的值累加到totalSums
中。 - 输出累加结果。
- 遍历
输出结果:
假设 devPowerMap
包含如下数据:
devPowerMap.put(1L, new Double[]{1.0, 2.0, 3.0, 4.0, 5.0});
devPowerMap.put(2L, new Double[]{6.0, 7.0, 8.0, 9.0, 10.0});
devPowerMap.put(3L, new Double[]{11.0, 12.0, 13.0, 14.0, 15.0});
则输出结果为:
每个索引值的和:
索引 0 对应值之和: 18.0
索引 1 对应值之和: 21.0
索引 2 对应值之和: 24.0
索引 3 对应值之和: 27.0
索引 4 对应值之和: 30.0
这个方案可以高效地遍历 Map<Long, Double[]>
并对每个索引的值进行相加。目前这个问题是解决了,那我们再扩展一下,相同索引求和是一种场景。
- 那假如 Double[]中每2个一组再求和呢?
- 要是 直接求总和呢?
大家可以思考一下,试试看~