将数组列表添加到另一个arraylist

时间:2015-06-10 09:26:29

标签: java

我正在尝试在另一个数组列表中添加数组列表,并返回最终数组列表。 我在表中有4条记录,当我试图显示时,第一组记录只有4次出现。

    ArrayList<String> al = new ArrayList<String>();
    ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();

    try
    {
        conn=com.sample.DBConnection.getDBConnection();
        String query= null;
        query=com.sample.RRRConstants.REPORT_SUMMERY;
        st = conn.createStatement();
        rs=st.executeQuery(query);
         Map<String, Object[]> summ = new HashMap<String, Object[]>();

        while(rs.next())
        {

            al.add(rs.getString("sched_id"));
            al.add(rs.getString("sched_name"));
            al.add(rs.getString("gen_date"));
            al.add(rs.getString("gen_time"));
            al.add(rs.getString("generated_by"));
            al.add(rs.getString("gen_version"));
            al.add(rs.getString("gen_status"));
            list.add(al);   

        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

显示:

     ArrayList<ArrayList<String>> a1 =rs.getSummary();

     ArrayList<String> a2 = new ArrayList<String>();


     for (int i=0 ; i <a1.size() ; ++i)
     {
         a2 = a1.get(i);
         System.out.println(i +" record "+a2.get(0));
         System.out.println(i +" record "+a2.get(1));
         System.out.println(i +" record "+a2.get(2));
         System.out.println(i +" record "+a2.get(3));
         System.out.println(i +" record "+a2.get(4));
         System.out.println(i +" record "+a2.get(5));
         System.out.println(i +" record "+a2.get(6));
     }  

3 个答案:

答案 0 :(得分:4)

您正在创建一个ArrayList<String>,并多次向该ArrayList<ArrayList<String>>添加对该列表的引用。

您需要在循环中创建一个新对象,以便每次迭代都创建一个独立的列表:

while(rs.next())
{
    ArrayList<String> al = new ArrayList<>();
    ...
}

但是,我建议不要使用ArrayList<String> - 鉴于您有非常具体的字段,为什么不创建自己的类型,其中包含计划ID,计划名称等属性?这可能比使用特定含义的每个索引关联的字符串列表更容易使用。

答案 1 :(得分:1)

更改您的while语句,然后像这样重新al

while(rs.next()) {
   ArrayList<String> al = new ArrayList<String>();
   al.add(rs.getString("sched_id"));
   al.add(rs.getString("sched_name"));
   al.add(rs.getString("gen_date"));
   al.add(rs.getString("gen_time"));
   al.add(rs.getString("generated_by"));
   al.add(rs.getString("gen_version"));
   al.add(rs.getString("gen_status"));
   list.add(al);   
}

否则,您只有一个ArrayList实例,其中包含所有内容,而您的usecase需要为每个Loop提供一个ArrayList。

答案 2 :(得分:0)

每次循环都会添加相同的列表。尝试每次都创建一个新列表。像这样:

while(rs.next())
        {
           ArrayList<String> al = new ArrayList<String>();
            al.add(rs.getString("sched_id"));
            al.add(rs.getString("sched_name"));
            al.add(rs.getString("gen_date"));
            al.add(rs.getString("gen_time"));
            al.add(rs.getString("generated_by"));
            al.add(rs.getString("gen_version"));
            al.add(rs.getString("gen_status"));
            list.add(al);   

        }