大家好,我的问题是这样的:
现在有一个courseList保存着多个course对象
List<CourseVo> courseList = new ArrayList<CourseVo>();
CourseVo c1 = new CourseVo();
c1.setCourse_name("c1");
CourseVo c2 = new CourseVo();
c2.setCourse_name("c2");
CourseVo c3 = new CourseVo();
c3.setCourse_name("c3");
CourseVo c4 = new CourseVo();
c4.setCourse_name("c4");
courseList.add(c1);
courseList.add(c2);
courseList.add(c3);
courseList.add(c4);
需要把courseList拆分成多个list,然后保存到lists中
List<List> lists = new ArrayList<List>();
List<CourseVo> list = new ArrayList<CourseVo>();开始做循环
           CourseVo c = null;
  int index =0;

for(int i=0;i<courseList.size();i++)
{
c = courseList.get(i);
list.add(c);
if((i+1)%2 != 0)
{
continue;
}
lists.add(index, list);
问题就在这里
我已经将list添加到lists中了,可以当我clear()后,想取存放进lists中的list就取不到了???
                list.clear();
List l = lists.get(index);
for(int k=0;k<l.size();k++)//这里size()=0,取不到保存进去的list
{
CourseVo course = (CourseVo)l.get(k);
System.out.println(course.getCourse_name());
}

 index++;
}说明:因为每次循环的将对象保存到list中,然后再将list保存到lists中,完成之后需要将list清空,然后再保存新的对象,再依次 重复。不知道是不是clear()这个方法将add(index,list)里面的list都清空?如果是这样,那有什么方法能解决我上面的问题。谢谢了!

解决方案 »

  1.   

    List<CourseVo> list = new ArrayList<CourseVo>();
    放到循环里
      

  2.   

    //这就是我的整段代码:
    List<CourseVo> courseList = new ArrayList<CourseVo>();//最初的List
    CourseVo c1 = new CourseVo();
    c1.setCourse_name("c1");
    CourseVo c2 = new CourseVo();
    c2.setCourse_name("c2");
    CourseVo c3 = new CourseVo();
    c3.setCourse_name("c3");
    CourseVo c4 = new CourseVo();
    c4.setCourse_name("c4");
    courseList.add(c1);
    courseList.add(c2);
    courseList.add(c3);
    courseList.add(c4);

    List<List> lists = new ArrayList<List>();//用来保存新的List
    List<CourseVo> list = new ArrayList<CourseVo>();
    CourseVo c = null;
    int index =0;

    for(int i=0;i<courseList.size();i++)
    {
    c = courseList.get(i);
    list.add(c);
    if((i+1)%2 != 0)
    {
    continue;
    }
    lists.add(index, list);
    // List l = lists.get(index);
    // for(int k=0;k<l.size();k++)
    // {
    // CourseVo course = (CourseVo)l.get(k);
    // System.out.println(course.getCourse_name());
    // }
    list.clear();
    List l = lists.get(index);
    for(int k=0;k<l.size();k++)
    {
    CourseVo course = (CourseVo)l.get(k);
    System.out.println(course.getCourse_name());
    }

    index++;
    }
    System.out.println(list.size());
    System.out.println(lists.size()); for(int j=0;j<lists.size();j++)
    {
    List clist = lists.get(j);
    if(clist != null)
    {
    System.out.println(clist.size());
    for(int k=0;k<clist.size();k++)
    {
    CourseVo course = (CourseVo)clist.get(k);
    System.out.println(course.getCourse_name());
    }
    }

    }
      

  3.   

    LZ,想不说代码,我想问,你每遍历一个CourseVo,然后把这个CourseVo加到一个list里面,再把这个list加到一个lists里面,再遍历lists输出,这样做好象没啥意义呢代码,LZ,能都用foreach和返型吗?看上面的代码看得好痛苦其实就把List<CourseVo> list = new ArrayList<CourseVo>();放到循环里,不用去clean就好了
      

  4.   

    lists.add(index, list);
    // List l = lists.get(index);
    // for(int k=0;k<l.size();k++)
    // {
    // CourseVo course = (CourseVo)l.get(k);
    // System.out.println(course.getCourse_name());
    // }
    list.clear();
    List l = lists.get(index);
    不明白你为什么这样做中.你都clear了,为什么还要取出来操作啊....现在算是点明白了.
    List<CourseVo> list = new ArrayList<CourseVo>();放到循环里吧.每次创建新的list.
      

  5.   

    也不太对,你想怎么分这个list的啊?怎么样分成多个呢?单双吗?
      

  6.   

    new个新的list放到lists就好了!
      

  7.   

    lists.add(index, list);
    lists中保存的是list对象的引用,你吧list.clear()了.引用里面就空了
      

  8.   

    好好看看API吧 clear
    public void clear()移除此列表中的所有元素。此调用返回后,列表将为空。 指定者:
    接口 Collection<E> 中的 clear
    指定者:
    接口 List<E> 中的 clear
    覆盖:
    类 AbstractList<E> 中的 clear
      

  9.   

    正解是:if((i+1)%2 != 0)

    list.add(c);
    continue;
    }

    else{
    list.add(c);
    lists.add(index, list);
    list = new ArrayList<CourseVo>();
    }

    这样我每次循环后的就是一个新的list了。还是谢谢大家。