List中有多个对象,都是同一个PO类的对象,里面有一个sid属性与一个日期属性,现在需要把这个list里面的对象按照sid属性进行分类,就是所有sid相同的对象,放入一个新的arrayList里面.
真的是一个比较有意思的问题,如果可以的话,还需要在排序后能按照对象的另一个属性进行排序..
希望高手解疑惑,新人感激不尽...

解决方案 »

  1.   

    说说我的思路:
    冒泡:问题在于我冒泡之后确实已经按照sid进行了一定的排序,但我并不能确认sid相同的对象分别有几个!可能是3个为1的,3个为3的,6个为8的..这些确认不了,我就进入不了下一个步骤啊..闷中..
    双for循环,在循环内部进行比较,然后相同的都扔到一个新的arrayList里面:
    问题在于..第一个与第三个相同比较后,第三个与第一个还比较..然后会出现很多垃圾数据....也不能确定相同的对象有多少..高手呢..高手在哪,帮帮我呀..要哭死我了.
      

  2.   

    就是List再排序的过程。你参考一下我写的代码              
                   List<CourseNode> catalogNodes = this.courseManager.getCourseNodeChildren(this.lessonManager.getLessonCatalogCourseId(), null);
    Collections.sort(catalogNodes, new Comparator<CourseNode>(){
    public int compare(CourseNode o1, CourseNode o2) {
    return o1.getEnglishName().compareTo(o2.getEnglishName());
    }
    });
      

  3.   

    给你一个好的思路吧,用TreeMap,如下:
    TreeMap tm=new TreeMap();
    tm.put("1", "11111111");
    tm.put("0", "00000000");
    tm.put("8", "8888888888");
    tm.put("3", "333333333");
    System.out.println("TreeMap1="+tm);
    Set s=tm.keySet();
    Iterator it=s.iterator();
    while(it.hasNext()){
    System.out.println(tm.get(it.next()));
    }
    打印结果:
    TreeMap1={0=00000000, 1=11111111, 3=333333333, 8=8888888888}
    00000000
    11111111
    333333333
    8888888888
    看到了吗,是按key排序的,你可以把对象的sid作为key,把PO作为value,如:
    tm.put(u.getSid(),u);
    这样,用哪个属性作key,就按哪个属性排序
      

  4.   

    我用的是1.4,用Collections.sort有一个classcasteception ,现在已经有自己的思路了.如果实现了我会发上来和大家分享..哈哈
    如果我的思路实现不了,再和楼上请教..
      

  5.   

    从上面的例子可以看出来,tm.keySet();生成的也是TreeSet,从打印结果可以看出来,
      

  6.   

    哇,3楼厉害..一看就明白,而且比我的效率更高..哈哈谢谢呀..大侠厉害...佩服佩服..
    我改成你的吧..哈哈..
    不对呀..我是分类..不是排序呀...这样我还是实现不了我的业务需求呀..这样吧,我给你大概再说一下..<root>
     <side>
      <sid>111</sid>
      <day value="2008-03-10">
      <sss>0</sss>
      <ddd>0</ddd>
        <fff>123</fff>
      </day>
      <day value="2008-03-11">
      <sss>2000</sss>
      <ddd>789</ddd>
        <fff>234</fff>
      </day>
     </side>
     <side>
      <sid>222</sid>
      <day value="2008-03-10">
      <sss>500</sss>
      <ddd>222</ddd>
        <fff>111</fff>
      </day>
      <day value="2008-03-11">
      <sss>900</sss>
      <ddd>444</ddd>
        <fff>333</fff>
      </day>
     </side>
    </root>
    实现这样一个效果..现在po完全没有问题.了,数据也有了..是一个list,但关键在于他的分类很麻烦.
      

  7.   

    哎。你在我的代码基础上再改写一下不就Ok了。现在通过我开始给你的代码已经能把你的List中的对象按照sid从小到大的顺序排列了。
    那你就再加个方法把不同sid的放在不同的list中不久Ok了
    排序的过程。你参考一下我写的代码             
    List <CourseNode> catalogNodes = this.courseManager.getCourseNodeChildren(this.lessonManager.getLessonCatalogCourseId(), null);
    Collections.sort(catalogNodes, new Comparator <CourseNode>(){
        public int compare(CourseNode o1, CourseNode o2) {
        return o1.getEnglishName().compareTo(o2.getEnglishName());
        }
    });
    //思路:定义个一个变量保存上次循环的值,如果值发生变化,那边就证明是新的SID,需要创建一个新的List。
    //这里循环创建List( 示意代码,你需要调试)
    List<list> list =  new ArrayList<List>();
    Side oldSide = null;
    int index = 0;
    List<Side> noSameSideList = null;
    for(Side sideList :  你排序好的List) {
        if(index == 0) {
            oldSide = sideList ;
            noSameSideList  = new ArrayList<Side>();
        }
        if(oldSide.getSide() != sideList.getSide()) {//是新的List中的Side了
            list.add(noSameSideList )
            noSameSideList  = new ArrayList<Side>();
        }else{
            noSameSideList.add(sideList );
            if(index == 你排序好的List.size()-1) {
                 list.add(noSameSideList )
            }
        }
        index ++;
    }
      

  8.   

    你说的分类指指什么啊,是sid相同的???
      

  9.   

    package ch5;import java.io.BufferedWriter;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeMap;public class A  {
     
    public Map<Integer, List<User>> sort(List<User> list){
    TreeMap<Integer, List<User>> tm=new TreeMap<Integer, List<User>>();
    for(int i=0;i<list.size();i++){
    User u=(User)list.get(i);
    if(tm.containsKey(u.getSid())){//
    List<User> l=(List<User>)tm.get(u.getSid());
    l.add(u);
    }else{
    List<User> tem=new ArrayList<User>();
    tem.add(u);
    tm.put(u.getSid(), tem);
    }

    }
    return tm;
    }
    public static void main(String[] args) throws IOException{
    List<User> l=new ArrayList<User>();
    User u=new User();
    u.setSid(5);
    User u1=new User();
    u1.setSid(1); User u2=new User();
    u2.setSid(1);
    User u3=new User();
    u3.setSid(4); l.add(u);
    l.add(u1);
    l.add(u2);
    l.add(u3);
    System.out.println(new A().sort(l));
    }}打印结果:
    {1=[ch5.User@757aef, ch5.User@d9f9c3], 4=[ch5.User@9cab16], 5=[ch5.User@1a46e30]}