java - 从数据库表中填充 Java HashMap
问题描述
我有一个有两列的表,一列是字符串,另一列是双列。例如,
+========+=============+
| Center | Efficiency |
+========+=============+
| A1 | 0.603576904 |
+--------+-------------+
| A2 | 0.557877389 |
+--------+-------------+
| A3 | 0.70911818 |
+--------+-------------+
| A4 | 0.048944132 |
+--------+-------------+
| A1 | 0.064781491 |
+--------+-------------+
| A2 | 0.192317935 |
+--------+-------------+
| A3 | 0.316078683 |
+--------+-------------+
| A4 | 0.121362541 |
+--------+-------------+
| A1 | 0.815996499 |
+--------+-------------+
| A2 | 0.032305255 |
+--------+-------------+
| A3 | 0.750355015 |
+--------+-------------+
| A4 | 0.071286058 |
+--------+-------------+
我正在尝试读取所有值并将它们加载到Java HashMap<String, Double[]>
我在读取表数据方面没有任何问题,但无法按照我的意愿将它们放入 HashMap 中。
我编写了一个示例代码来从两个不同的字符串数组和双精度数组填充一个 HashMap,但仍然对使用数组的 Hashmap 的值部分感到困惑。
String[] names = { "8A", "8C", "8J", "8A", "8C", "8J", "8A", "8C", "8J", "8A", "8C", "8J", };
Double[] metrics = { 0.60, 0.55, 0.70, 0.04, 0.06, 0.19, 0.31, 0.12, 0.81, 0.03, 0.75, 0.07 };
for (int i = 0; i < 12; i++)
{
if (values.get(names[i]) == null)
{
values.put(names[i], new ArrayList<Double>(Arrays.asList(metrics[i])));
}
else
values.get(names[i]).add(metrics[i]);
}
System.out.println(values);
任何建议我如何处理作为数组的 HashMap 的值部分,其大小将取决于表行号。
解决方案
现在 Map 有一些方便的方法,你可以使用 computeIfAbsent:
Map<String, List<Double>> values = new HashMap<>();
for (int i = 0; i < 12; i++) {
List<Double> items = values.computeIfAbsent(names[i], k -> new ArrayList<>());
items.add(metrics[i]);
}
这里有一个更详细的帖子。
但是如果你想要一个Map<String, double[]>
then 在加载过程中非常不方便,因为数组有固定的大小,你需要一遍又一遍地复制它们。您可以double[]
使用列表版本进行加载并最终转换它
Map<String, double[]> dvalues = new HashMap<>();
values.forEach((k, v) -> dvalues.put(k, v.stream().mapToDouble(i -> i).toArray()));
或者如果它应该是Double[]
Map<String, Double[]> dvalues = new HashMap<>();
values.forEach((k, v) -> dvalues.put(k, v.toArray(new Double[v.size()])));
我看到的唯一选择是对原始数据进行两次迭代,首先计算每个键的值的数量,使用适当大小的数组创建一个映射,再次迭代原始数据,跟踪每个值数组中的 maxIdx 为他们填满了......非常复杂。
推荐阅读
- python - 时间序列、趋势和偏离趋势
- swift - onLongPressGesture frame in SwiftUI
- google-sheets - 如何查询 Google 表格数据并对数据进行分组,其中数据是日期列中的名称?
- html - 按钮上的背景图像不出现
- javascript - Web scraping a site with javascript using vba
- c# - ECMA-335 I.12.6.8 Memory Clarifications - Zeroed Object and Padding Byte Guarantees?
- python - Pytorch tracing - How do you trace a saved weight?
- javascript - 将变量转换为 JavaScript 中“typeof”的输出
- typescript - 排版组件
- python - 未定义关系的外连接 SQLAlchemy