有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何获取驻留在列表中的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;
}

所以我返回一个列表,其中包含键和值对。在我的客户机逻辑中,我必须获得列表,并将每个hashMap中的键值与文本进行比较

我们怎么能做到呢?请帮我做这个

提前谢谢


共 (2) 个答案

  1. # 1 楼答案

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

    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
    }
    
  2. # 2 楼答案

    如果您的问题是不应该使用的原始类型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