当前位置: 首页 > 知识库问答 >
问题:

从数据库表填充Java HashMap

仲孙翔飞
2023-03-14

我有一个有两列的表,一个是string,另一个是double Type。例如,

+========+=============+
| 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

我在读取表数据方面没有任何问题,但不能按我的要求将它们放入HashMap中。

我编写了一个示例代码来从两个不同的数组(string和double)填充一个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的值部分,它是一个数组,大小取决于表行号。

共有1个答案

张和颂
2023-03-14

现在Map有一些方便的方法,你可以使用ComputeifAstant:

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 ,那么这在加载过程中是非常不方便的,因为数组的大小是固定的,您需要一遍又一遍地复制它们。您可以使用用于加载的列表版本来获得double[]并最终转换它

Map<String, double[]> dvalues = new HashMap<>();
values.forEach((k, v) -> dvalues.put(k, v.stream().mapToDouble(i -> i).toArray()));

或者它应该是双[]

Map<String, Double[]> dvalues = new HashMap<>();
values.forEach((k, v) -> dvalues.put(k, v.toArray(new Double[v.size()])));

我看到的唯一的替代方法是对原始数据进行两次迭代,首先计算每个键的值数,用适当大小的数组创建映射,然后在原始数据上再次迭代,跟踪每个值数组中的maxIdx。非常复杂。

 类似资料:
  • 简介 Laravel 可以用 seed 类轻松地为数据库填充测试数据。所有的 seed 类都存放在 database/seeds 目录下。你可以任意为 seed 类命名,但是更应该遵守类似 UsersTableSeeder 的命名规范。Laravel 默认定义的一个 DatabaseSeeder 类。可以在这个类中使用 call 方法来运行其它的 seed 类从而控制数据填充的顺序。 编写 See

  • 问题内容: 我有一个表格(“场地”),其中存储了志愿者可以工作的所有可能场所,每个志愿者被分配为每个场所工作一个。 我想从场所表中创建一个选择下拉列表。 现在,我可以显示分配给每个志愿者的地点,但是我希望它显示下拉框,并且已经在列表中选择了地点。 例如,将ID为7的志愿者分配给了场地编号4 我知道它将采用for或while循环的形式从场地表中拉出场地列表 我的查询是: 如何填充选择下拉框与场馆(

  • 我看到了许多类似问题的答案,人们说为了获得组合框中加载的项目的值,需要使用 但这种东西不起作用…… 这是我所拥有的…… 我从表中选择了Code1和Code2,我希望能够显示Code1,当被选中时,我希望能有Code2的值,但对于displayMember和ValueMember,我看不到任何结果。 编辑:这是我的所有代码: 暗淡的行=dt. Load(com. Ex 错误提示:表达式不产生值 编辑

  • 我有一个基于类的视图(IndexView at views.py),它显示了一个包含数据库中存储的所有数据的表。此视图在索引中呈现。html使用获取所有数据。还没有问题。 对我来说,困难的部分是尝试使用表单来完成它,以便能够修改和保存金额列。我对POST部分没有问题,我使用AJAX来保存新值。我遇到的问题是从数据库中获取初始值以填充Django表单(forms.py) 我尝试在表单字段的定义中使用

  • 这是我第一次来到这个网站。我已经在web上搜索了如何将sqlite数据库填充到可扩展的listview,但我失败了。 我遵循这些步骤来了解如何创建可扩展的listview,并修改一些代码使其动态化。 当我试图运行模拟器时,程序崩溃了。 我是android开发的新手,我需要你们专家的帮助…提前道谢。 哦..我很抱歉。这是我的logcat的结果...这只是错误部分。