为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

12345678_0001 2021-09-12 14:38:16
有点初学者的问题,但是...我有一个从数据库返回的 ResultSet 对象 - 3 列,每列 30 行。我检索以下数据集:使用以下内容:   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 返回...调试时显示如下:我希望能够在伪代码中迭代 HashMap 值:获取密钥 0获取值 0、1 和 2使用这些作为测试数据如果不走运,请尝试密钥 2我知道这应该不难,我只是在努力寻找迭代 HashMap 的 ArrayList 的最佳方法
查看完整描述

2 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

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


这种将 DB 行转换为地图的模型是一个坏主意。有很多不错的库可以与数据库交互。例如,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 或类似的库是您真正想要的。


查看完整回答
反对 回复 2021-09-12
?
繁星coding

TA贡献1797条经验 获得超4个赞

你需要一个嵌套的循环(至少我会那样做......不仅有其他几种方法):


for (HashMap<T,T> i : ArrayList<HashMap<T,T>>) {

    for (T j : i.keySet()){

        i.get(j);

        //further code

    }

}


查看完整回答
反对 回复 2021-09-12
  • 2 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信