4

データベースからいくつかの値を取得しています。これらの値をリストに追加してから、値に基づいて特定のキーを使用して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"

行1と行3をリストに入れ、行2と行4をそれぞれ別々のリストに入れてから、これら3つのリストをMAPに入れ、カテゴリ名(1、2、3)をMAPのキーとして使用する必要があります。

MAP
   1 LIST1 (values of 2 rows)
   2 LIST2 (values of 1 row)
   3 LIST3 (values of 1 row)

それらをリストと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);
 }

最後の行でこのエラーが発生します>""メソッドadd(Rows)はタイプObjectに対して未定義です。同じエラーが発生したリストにオブジェクトを追加しても、メソッドadd(List)はタイプObjectに対して未定義です。

4

5 に答える 5

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);
  }

アップデート

問題は、ここでジェネリック型を指定する必要があることです

 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);
  }
于 2012-09-29T05:42:12.767 に答える
3

カテゴリをキーとし、リストの ArrayList を値とするマップを使用できます。ArrayList は、追加すると自動的にサイズが変更されます。Mapは put(key, value) を使用して要素を追加します。 ArrayListは add(element) または add(index, element) を使用します。

于 2012-09-29T05:24:40.957 に答える
3

Map 内で Map を使用することをお勧めします

Map<Integer, Map<Integer, String>> map = new HashMap<Integer, Map<Integer,String>>();

外側のマップは、行と値のマップに対して分類されます。そのため、行に基づいて値を検索するたびに、簡単に実行できます。

于 2012-09-29T05:29:46.907 に答える