gpt4 book ai didi

java - 迭代存储在 ArrayList 中的 HashMap 中的值

转载 作者:行者123 更新时间:2023-11-30 07:44:52 26 4
gpt4 key购买 nike

有点初学者的问题但是...

我有一个从数据库返回的 ResultSet 对象 - 3 列 30 行。

我检索了以下数据集:

enter image description here

使用以下内容:

   try {
preparedStatement = conn.prepareStatement(
sqlStatement,
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);

rs = preparedStatement.executeQuery();

ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();

while(rs.next()) {
HashMap row = new HashMap(columns);
for(int i=1; i<=columns; ++i){
row.put(md.getColumnName(i),rs.getObject(i));
}
list.add(row);
}

...然后我将它作为 ArrayList 返回

enter image description here

...调试时显示如下:

enter image description here

我希望能够在伪代码中迭代 HashMap 值:

  1. 获取 key 0
  2. 获取值 0、1 和 2
  3. 将这些用作测试数据
  4. 如果运气不佳,请尝试 key 2

我知道这应该不难,我只是在努力寻找迭代 HashMap 的 ArrayList 的最佳方法

最佳答案

您正在使用原始类型,而您的 IDE 或编译器会向您发出大量警告。你应该注意他们。因为你没有,所以你能够编写代码来分配一个包含映射的列表(每个映射代表一个返回的数据库结果,将列名映射到行中的值)......到一个类型为 List<String> 的变量。 .

这种将数据库行转换为 map 的模型是个坏主意。有很多不错的库可以与数据库交互。例如,JDBI易于理解 具有更深思熟虑的 API 来访问结果。它甚至可以将结果映射到 Java 数据类型。

如果您必须使用到目前为止粘贴的模型,对于初学者,请在各处添加泛型,以便编译器将其标记为编译时错误。至少做到List<Map<String, Object>> .

让我重申,将事情切换到 JDBI 是一条更好的前进道路,但为了回答直接提出的问题,一旦您添加了泛型并修复了变量类型,您就可以这样做:

List<Map<String, Object>> data = getResultSet(syndicatorName);
for (int rowIdx = 0; rowIdx < data.size(); i++) {
Map<String, Object> row = data.get(rowIdx);
for (Map.Entry<String, Object> cell : row.entrySet()) {
System.out.printf("Row %d cell %s: %s\n", rowIdx, cell.getKey(), cell.getValue());
}
}

请注意,您的单元格值在这里是“对象”。您必须将它们转换为您知道的数据类型。这不是惯用的 java,但如果不完全重新设计 getResultSet 方法就无法解决这个问题。再次.. JDBI 或类似的库是您在这里真正想要的。

关于java - 迭代存储在 ArrayList 中的 HashMap 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52254972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com