如何根据hashMap的值向hashMap添加类的对象?

Eme*_*ana 3 java object hashmap

我正在从数据库中检索数量的值,需要将其添加到列表中,然后根据其值从具有特定Key的MAP中检索,例如,

row 1   name = "A" category = "1"
row 2   name = "B" category = "2"
row 3   name = "C" category = "1"
row 4   name = "D" category = "3"
Run Code Online (Sandbox Code Playgroud)

我需要将row1和row3放在一个列表中,将row2和row4中的每一个放在一个单独的列表中,然后将这三个列表放入MAP中,并使用类别名称(1,2,3)作为MAP的键.

MAP
   1 LIST1 (values of 2 rows)
   2 LIST2 (values of 1 row)
   3 LIST3 (values of 1 row)
Run Code Online (Sandbox Code Playgroud)

我不知道如何将它们添加到列表和MAP.我的约束是,每次检索值时都不会检索相同的行,因此每次我可能需要不同数量的列表来保存已检索的每个类别的值.

我的代码如下,

 ResultSet rs = st.executeQuery(SelectRows);
 Map map = new HashMap();
 if(rs.next())
 {
    item.setRowID(rs.getString("ID"));
    item.setName(rs.getString("Name"));                       
    item.setValue(rs.getString("Value"));
    item.setCat(rs.getString("Cat"));
    if(!map.containsKey(rs.getString("Cat"))){
        map.put(rs.getString("CatID"), new ArrayList());
    }
    map.get(rs.getString("CatID")).add(row);
 }
Run Code Online (Sandbox Code Playgroud)

最后一行遇到此错误>""对象类型未定义方法add(Rows).即使我将对象添加到列表中我遇到相同的错误,对于类型Object,方法add(List)是未定义的.

use*_*062 8

您需要创建列表地图.当您读取记录时,如果存在密钥(此处为类别),则将当前行添加到列表中

 Map map = new HashMap()
 for( Row row : resultset ) {
      if(!map.containsKey(row.category)){
            map.put(row.category, new ArrayList());
      }
      map.get(row.category).add(row.name);
  }
Run Code Online (Sandbox Code Playgroud)

UPDATE

问题是你需要在这里指定泛型类型

 Map<String, List<Rows>> map = new HashMap<String, List<Rows>>()
 while( rs.next() ) {
      Rows row = new Rows();
      /*
       * code to initialize the values of row from the record
       */
      String category = rs.getString("Cat");
      if(!map.containsKey(category)){
            map.put(category, new ArrayList<Rows>());
      }
      map.get(category).add(row);
  }
Run Code Online (Sandbox Code Playgroud)