如果相同的键在java中具有多个外观,则将一个值映射为键,将另一个值映射为列表

时间:2016-03-13 23:00:10

标签: java dictionary iteration

我正在尝试形成并迭代一个地图,其中包含重复键和arraylist作为值。我试过跟随,但它没有像我预期的那样工作。假设

value1="Ramu" 
value2="1";
value3="2";
value1="Ramu"
value2="3";
value3="4";
value1="John"
value2="1"
value3="2"

当我迭代地图时,我应该获得关键Ramu的1,2,3,4和关键John的1,2 这是我的一段代码

SQL="select value1,value2,value from student where student="Ramu"";
Bean bean;
ArrayList<Bean> beanList = new ArrayList<Bean>();
Map<String,ArrayList<Bean>> holder=new HashMap<String,ArrayList<Bean>>();
pst = null;
rs = null;
try {
           pst = conn.createStatement();
            rs = pst.executeQuery(SQL);
 while (rs.next()) {                    
                String value1=rs.getString("value1");

                bean = new Bean();                
                bean.setvalue2(rs.getString("value2"));
                bean.setvalue3(rs.getString("value3"));
                beanList.add(bean);
               holder.put(value1, beanList);

            }

2 个答案:

答案 0 :(得分:1)

您始终使用相同的beanList。每当在地图中插入新条目时,都需要创建一个新列表。

String value1=rs.getString("value1");

bean = new Bean();                
bean.setvalue2(rs.getString("value2"));
bean.setvalue3(rs.getString("value3"));

beanList = holder.containsKey(value1) ? holder.get(value1) : new ArrayList<Bean>();
beanList.add(bean);
holder.put(value1, beanList);

应该这样做。

答案 1 :(得分:0)

嗯,地图的目的是你有一个唯一键,它指向一个值。密钥不能重复,它没有任何意义,插入一个已经存在于地图中的密钥的值只会重写前一个值。

所以在你的情况下,你的钥匙应该是&#34; Ramu&#34;和&#34;约翰&#34;然后你会有映射:

  • Ramu - &gt;列表(1,2,3,4)
  • 约翰 - &gt;列表(1,2)