【问题标题】:Put arraylist in hashmap with key as one of the columns将arraylist放在hashmap中,键作为列之一
【发布时间】:2017-12-05 12:23:08
【问题描述】:

我有一个包含多行的结果集。我想做一个哈希图。但是在存储 arrayList 并将键作为列之一时,对于每个键,所有行都存储在 arrayList 中。 这意味着对于每个键,所有行都被存储,而不是该键的确切行。

  • HashMap> map = new HashMap>(); Pojo pojo = null; PreparedStatement ps = null; 结果集 rs = null; ArrayList 列表 = null;

       try {
           ps = DatabaseManager.prepareStatement(query);
           ps.setInt(1, number);
           rs = ps.executeQuery();
           while(rs.next()){
    
             pojo = new Pojo();
             pojo.setId(rs.getInt("ID"));
             pojo.setDate(rs.getDate("DATE"));
             pojo.setTotal(rs.getDouble("TOTAL"));
    
             list.add(pojo); map.put(rs.getInt("ID"), list);
           }
           rs.close();
    

所以对于所有键,列表的大小都是 15。虽然它应该像 ID 行 1A 3 2A 4 3C 2 4W 6

那么代码应该如何得到想要的结果呢?

【问题讨论】:

  • 为什么要将key和list存储在hashmap中?相反,您可以存储密钥和 pojo 本身。
  • 一个键有多行。因此,如果我存储 pojo,则只会存储一个值。

标签: arraylist hashmap


【解决方案1】:

你可以试试这样的,

while(rs.next()){
    // Check if map contains list
    if (map.contains(rs.getInt("ID"))
        list = map.get(rs.getInt("ID"));
    else
        list = new ArrayList<Pojo>();

    pojo = new Pojo();
    pojo.setId(rs.getInt("ID"));
    pojo.setDate(rs.getDate("DATE"));
    pojo.setTotal(rs.getDouble("TOTAL"));

    list.add(pojo); 
    map.put(rs.getInt("ID"), list);
}

希望它有效。

【讨论】:

    猜你喜欢
    • 2012-04-15
    • 2013-01-12
    • 2011-10-10
    • 2016-06-04
    • 2017-08-14
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 2012-06-02
    相关资源
    最近更新 更多