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

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

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

我检索以下数据集:

http://img.mukewang.com/613da0710001b9e606180192.jpg

使用以下内容:


   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 返回

http://img2.mukewang.com/613da07f0001591f05360086.jpg

...调试时显示如下:

http://img.mukewang.com/613da0850001931105570239.jpg

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

  1. 获取密钥 0

  2. 获取值 0、1 和 2

  3. 使用这些作为测试数据

  4. 如果不走运,请尝试密钥 2

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


12345678_0001
浏览 141回答 2
2回答

心有法竹

您正在使用原始类型,而您的 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++) {&nbsp; &nbsp; Map<String, Object> row = data.get(rowIdx);&nbsp; &nbsp; for (Map.Entry<String, Object> cell : row.entrySet()) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.printf("Row %d cell %s: %s\n", rowIdx, cell.getKey(), cell.getValue());&nbsp; &nbsp; }}请注意,此处的单元格值为“对象”。您必须将它们转换为您知道的数据类型。这不是惯用的 java,但是如果不完全重新设计 getResultSet 方法,就无法解决这个问题。再次.. JDBI 或类似的库是您真正想要的。

繁星coding

你需要一个嵌套的循环(至少我会那样做......不仅有其他几种方法):for (HashMap<T,T> i : ArrayList<HashMap<T,T>>) {&nbsp; &nbsp; for (T j : i.keySet()){&nbsp; &nbsp; &nbsp; &nbsp; i.get(j);&nbsp; &nbsp; &nbsp; &nbsp; //further code&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java