如何获取驻留在列表中的HASHMAP的键值

时间:2014-04-08 11:19:35

标签: java list hashmap

我的代码:

public List resultSetToArrayList(ResultSet rs) throws SQLException{
  ResultSetMetaData md = rs.getMetaData();
  int columns = md.getColumnCount();
  ArrayList list = new ArrayList(50);
  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);
  }

return list;
}

所以我返回了包含Key和Value对的列表。在我的客户端逻辑中,我必须获取列表并将每个hashMap中的键值与Text进行比较。

我们怎么能这样做?请帮助我。

提前致谢

2 个答案:

答案 0 :(得分:0)

如果您的问题是原始类型List,您不应该使用,那么您必须将行转换为HashMap<String,Object>

HashMap<String,Object> row = (HashMap<String,Object>) list.get(rowNum);

然后获取列名:

Set<String> columns = row.keySet();

价值观:

Object value = row.get(columnName);

编辑:根据您的评论,您似乎需要一列作为键,另一列作为值。因此,当您创建HashMap时,不应使用getColumnName作为键,而应使用该列的值:

ArrayList list = new ArrayList(50);
while (rs.next()){
    HashMap row = new HashMap(columns);
    row.put(rs.getObject(0),rs.getObject(1));
    list.add(row);
}

警告:我不知道你想对此做些什么,但这很奇怪,因为你只有HashMap行中的一个键和一个值。您可能希望使用包含所有行的单个HashMap(并删除List):

HashMap<String,String> table = new HashMap<String,String>();
while (rs.next()){
    table.put(rs.getString(0),rs.getString(1));
}

如果您事先不知道密钥将在第0列中,并且值将在第1列中,但您知道列的名称,那么您可以遍历列以查找列的索引一个名字正确。

String keyColumnName = "FROM";
int keyColumnNum = -1; // to be found
for (int i = 0; i < md.getColumnCount(); i++) {
    if (keyColumnName.equals.getColumnName(i)) {
        keyColumnNum = i;
        break;
    }
}
// if the column exists, keyColumnNum has the right value here

答案 1 :(得分:0)

首先,你不应该使用原始类型。将代码修改为类似的内容:

public List<Map<String, Object>> resultSetToArrayList(ResultSet rs) throws SQLException {
    final ResultSetMetaData md = rs.getMetaData();
    int columns = md.getColumnCount();
    final List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(50);
    while (rs.next()) {
        final HashMap<String, Object> row = new HashMap<String, Object>(columns);
        for (int i = 1; i <= columns; ++i) {
            row.put(md.getColumnName(i), rs.getObject(i));
        }
        list.add(row);
    }
    return list;
}

比你可以访问你的列表:

List<Map<String, Object>> list = yourObject.resultSetToArrayList(rs);
for (Map<String, Object> map : list) {
    //you can call map.get("yourkey") here
}