问题描述
这是一个list,其中每一行是一个object,ID="1"CTIME="2011032414"ID="3"CTIME="2011052414"ID="12"CTIME="2011041013"ID="2"CTIME="2011061013"ID="4"CTIME="2011041013"ID="22"CTIME="2011041013"ID="12"CTIME="2010041013"ID="1"CTIME="2011061013"ID="1"CTIME="2011041013"ID="3"CTIME="2010081023"ID="22"CTIME="2011041014"ID="4"CTIME="2010041014"那么如何根据ID来进行分组呢?能否给一段代码解释???谢谢了
解决方案
解决方案二:
遍历,放到Map中,Map的value也是个List
解决方案三:
排序后分组
解决方案四:
Map
解决方案五:
可以代码解释一下吗???
解决方案六:
实现一个Comparator接口里面根据ID先比较ID一样根据name比较然后Collections。sort(List<T>list,Comparator<?superT>c)结果会如你所愿:ID="1"CTIME="2011032414"ID="1"CTIME="2011041013"ID="1"CTIME="2011061013"Id=2id3=^^^^
解决方案七:
引用4楼aaa13141314的回复:
可以代码解释一下吗???
我想问一下楼上,如果我用HashMap类,将ID定为键,将CTIME定位值,我该怎样来写这个Comparator接口?
解决方案八:
路过,楼上几位说的思路都比较好。可以绕一下。先抽出来,赋给一个类型对象,然后取id,属于某个组在放到哪个集合里。然后有这么几个组的集合。
解决方案九:
不需要什么接口啊Mapm=newHashMap();遍历List(){Stringid=;//取出来IDStringCTIME=;//取出CTIMEif(m.get(id)!=null)//判断ID是否已经存在了{ArrayListlist=(ArrayList)m.get(id);//根据ID取出Listlist.add(CTIME);//放入CTIME}else//如果没有,则创建新的List放进去{ArrayListlist=newArrayList();list.add(CTIME);m.put(id,list);//第一次以这个ID将List放到Map中}}遍历Map则可以得到各ID的List了
解决方案十:
引用6楼wuda236556254的回复:
引用4楼aaa13141314的回复:可以代码解释一下吗???我想问一下楼上,如果我用HashMap类,将ID定为键,将CTIME定位值,我该怎样来写这个Comparator接口?
如果你是想使用map进行存储不同的分组那么可以参照8楼的做法我的做法不使用map,我的只是排序完依旧是一个list:packagetest;/****@Description:**@authorweisdEmail:xiyangdewuse@163.com*@date2011-4-10下午11:24:57*@versionv1.0*/publicclassTestVo{privateStringid;privateStringctime;publicTestVo(){};publicTestVo(Stringid,Stringctime){this.id=id;this.ctime=ctime;};publicStringgetId(){returnid;}publicvoidsetId(Stringid){this.id=id;}publicStringgetCtime(){returnctime;}publicvoidsetCtime(Stringctime){this.ctime=ctime;}@OverridepublicStringtoString(){if(id.length()==1){//只是为了好看returnid+""+ctime;}else{returnid+""+ctime;}}}
packagetest;importjava.util.Comparator;/****@Description:**@authorweisdEmail:xiyangdewuse@163.com*@date2011-4-10下午11:33:36*@versionv1.0*/publicclassUtilComparatorimplementsComparator{@Overridepublicintcompare(Objecto1,Objecto2){TestVov1=(TestVo)o1;TestVov2=(TestVo)o2;Stringid1=v1.getId();Stringctime1=v1.getCtime();Stringid2=v2.getId();Stringctime2=v2.getCtime();//这里就是你的排序规则inti1=id1.compareTo(id2);intc1=ctime1.compareTo(ctime2);if(i1==0){returnc1;}else{returni1;}}}
packagetest;importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;/****@Description:**@authorweisdEmail:xiyangdewuse@163.com*@date2011-4-10下午11:26:02*@versionv1.0*/publicclassTestComparator{/***@paramargs*/publicstaticvoidmain(String[]args){TestComparatort=newTestComparator();Listlist=t.getInitList();Collections.sort(list,newUtilComparator());for(inti=0;i<list.size();i++){System.out.println(list.get(i));}}publicListgetInitList(){StringID1="1";StringCTIME1="2011032414";StringID2="3";StringCTIME2="2011052414";StringID3="12";StringCTIME3="2011041013";StringID4="2";StringCTIME4="2011061013";StringID5="4";StringCTIME5="2011041013";StringID6="22";StringCTIME6="2011041013";StringID7="12";StringCTIME7="2010041013";StringID8="1";StringCTIME8="2011061013";StringID9="1";StringCTIME9="2011041013";StringID10="3";StringCTIME10="2010081023";StringID11="22";StringCTIME11="2011041014";StringID12="4";StringCTIME12="2010041014";TestVovo1=newTestVo(ID1,CTIME1);TestVovo2=newTestVo(ID2,CTIME2);TestVovo3=newTestVo(ID3,CTIME3);TestVovo4=newTestVo(ID4,CTIME4);TestVovo5=newTestVo(ID5,CTIME5);TestVovo6=newTestVo(ID6,CTIME6);TestVovo7=newTestVo(ID7,CTIME7);TestVovo8=newTestVo(ID8,CTIME8);TestVovo9=newTestVo(ID9,CTIME9);TestVovo10=newTestVo(ID10,CTIME10);TestVovo11=newTestVo(ID11,CTIME11);TestVovo12=newTestVo(ID12,CTIME12);Listlist=newArrayList();list.add(vo1);list.add(vo2);list.add(vo3);list.add(vo4);list.add(vo5);list.add(vo6);list.add(vo7);list.add(vo8);list.add(vo9);list.add(vo10);list.add(vo11);list.add(vo12);returnlist;}}
结果:1201103241412011041013120110610131220100410131220110410132201106101322201104101322201104101432010081023320110524144201004101442011041013可以根据需要设置比较规则://这里就是你的排序规则inti1=id1.compareTo(id2);intc1=ctime1.compareTo(ctime2);if(i1==0){returnc1;}else{returni1;}
我的结果只是在一个list中,并为分组
解决方案十一:
那么我如果再把分组后的结果再放到一个list中呢
解决方案十二:
这个....要看你怎么放回去了,对这个新的list有什么要求?你又要list,又要id,那么需要一个新的类来封装了.classTemp{Stringid;ArrayListlist;publicTemp(){}publicTemp(Stringid,ArrayListlist){this.id=id;this.list=list;}//对应的get/set方法}Setset=map.keySet();ArrayListlist=newArrayList();遍历set(){Stringkey=;//得到set中的元素,实际就是idlist.add(newTemp(key,map.get(key)));}