使用ResultSet将HashMap存入ArrayList时类型不匹配问题求助
解决HashMap存入ArrayList时的类型不匹配问题
你遇到的问题其实很典型——泛型类型不兼容:你定义的KEYWORDS是ArrayList<String>,这意味着这个列表只能存放String类型的对象,但你试图往里面添加的是HashMap<String,String>类型的对象,两者完全不是一个类型,编译器肯定会报错啦。
接下来给你两种靠谱的实现方式,看你需求选:
方式一:直接用存HashMap的ArrayList
如果你就想保留用HashMap存每一行数据的方式,那只需要把ArrayList的泛型改成对应类型就行,另外注意resultSet.getString()本身返回的就是String,不用多此一举调用toString():
// 把泛型改成HashMap<String, String>,明确列表里存的是HashMap对象 ArrayList<HashMap<String, String>> KEYWORDS = new ArrayList<HashMap<String, String>>(); String sql = "SELECT da_tag_name, da_tag_id FROM da_tags WHERE da_tag_type_id = 8"; PreparedStatement stmt = conn.prepareStatement(sql); ResultSet resultSet = stmt.executeQuery(); while (resultSet.next()) { HashMap<String, String> row = new HashMap<String, String>(); // 建议把键名固定成"name"和"id",后续取值的时候不容易出错 row.put("name", resultSet.getString(1)); row.put("id", resultSet.getString(2)); KEYWORDS.add(row); }
方式二:用自定义实体类(更推荐)
如果你的业务就是专门存储标签的名称和ID,用自定义类会更清晰,可读性和可维护性都比HashMap强,还能避免拼写键名时的错误:
先写一个简单的Tag实体类:
public class Tag { private String name; private String id; // 构造方法 public Tag(String name, String id) { this.name = name; this.id = id; } // 按需添加Getter和Setter方法 public String getName() { return name; } public String getId() { return id; } }
然后修改你的业务代码:
ArrayList<Tag> KEYWORDS = new ArrayList<Tag>(); String sql = "SELECT da_tag_name, da_tag_id FROM da_tags WHERE da_tag_type_id = 8"; PreparedStatement stmt = conn.prepareStatement(sql); ResultSet resultSet = stmt.executeQuery(); while (resultSet.next()) { String tagName = resultSet.getString(1); String tagId = resultSet.getString(2); Tag tag = new Tag(tagName, tagId); KEYWORDS.add(tag); }
后续你要取数据的时候,直接调用tag.getName()和tag.getId()就可以了,比HashMap的row.get("name")靠谱多啦。
内容的提问来源于stack exchange,提问作者dsafas fsafasfsa
相关产品推荐
相关产品推荐

