求助 将list分组

问题描述

这是一个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)));}

时间: 2024-10-09 07:32:36

求助 将list分组的相关文章

vs2010 ReportViewer 分组显示的问题,求助!

问题描述 数据:a,一,中,1a,二,中,2a,三,中,3ReportView中,分别设定3个组,按照第一列,第二列,第三列报表展示出来:一中,1a二中,2三中,3问题:怎么样才可以显示成:,前三列显示的顺序必须是这样.一1a二中2三3 解决方案 本帖最后由 kunshan 于 2016-03-17 10:20:34 编辑解决方案二:里面不是有分组的设置么

solr 分组统计求助

问题描述 现有的数据结构为:三层结构一个项目id,包含多个个人nid,每一个nid对应多个微博发帖uid.保存每个微博帖子时,会根据微博内容分析情况,打标签存至category字段.如:{"responseHeader":{"status":0,"QTime":1},"response":{"numFound":3565,"start":0,"docs":[{&quo

mysql-MySQL查询的语句求助,查询不重复一览

问题描述 MySQL查询的语句求助,查询不重复一览 有如下的表: CREATE TABLE loginlog (id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,username VARCHAR(100) DEFAULT NULL,operate VARCHAR(512) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=gbk 表内相同use

oracle数据库,SQL语句怎么写,求助

问题描述 oracle数据库,SQL语句怎么写,求助 如果选择的时间间隔是:"1年" 那个就将每年的最后一个数据显示出来 如果选择的时间间隔是:"1月" 那个就将每月的最后一个数据显示出来 如果选择的时间间隔是:"1日" 那个就将每天的最后一个数据显示出来 如果选择的时间间隔是:"1时" 那个就将每小时的最后一个数据显示出来 oracle数据库,SQL语句怎么写,求助 解决方案 按年等日期分组,取每组事件最大的. 解决方案二:

server-数据库超级简单的语句统计,菜鸟求助

问题描述 数据库超级简单的语句统计,菜鸟求助 SQL. server 我想统计某个表中每个月的数据.请问语句怎么写呢? 解决方案 group by 分组就可以, 解决方案二: http://www.cnblogs.com/rainman/archive/2013/05/01/3053703.html 解决方案三: group by分组之后就可以进行查看了 解决方案四: group by分组之后就可以进行查看了 解决方案五: 基本就是group by 你不发表结构,肯定没法给你写SQL语句的 解决

循环获取分组后的孩子数值

问题描述 求助,求助Devexpress如何循环获取分组后的申请量,求助求助.新手哈谢谢帮忙 解决方案 解决方案二:引用楼主yt_wasion的回复: 求助,求助Devexpress如何循环获取分组后的申请量,求助求助.新手哈谢谢帮忙 人呢,人呢?出来帮忙了!解决方案三:你能把问题描述得详细点吗?问题又描述得不详细,测试数据也没,怎么帮你解答..真郁闷解决方案四:自己循环累加是一个办法或者你获取数据的时候直接在SQL语句里做好,直接从数据库读出来解决方案五:用代码实现:先将所有(不重复)材料名称

求助:winform窗体控件多,屏幕闪的问题。

问题描述 如题,求助,情况如下:我的一个winform窗体,用于监控设备的实时状态.上面有比较多的线,上千条,label四百个左右,用于实时显示各个监控点的状态.现在的问题是,当切换窗体或者label值变化的时候,可能是窗体重绘,整个屏幕就会闪,严重影响性能.用了双缓冲,没有一点用.this.SetStyle(ControlStyles.UserPaint,true);this.SetStyle(ControlStyles.AllPaintingInWmPaint,true);//禁止擦除背景.

《HTML5开发手册》——1.7 中级“菜谱”:使用section元素对内容分组

1.7 中级"菜谱":使用section元素对内容分组 section元素是一个总是需要标题的内容区域或页面区域.可以用它将多个部分的内容组合在一起,也可以根据需要,将内容的某一部分进一步划分.它不可用作通用封装器(generic wrapper)来实现样式上的需求.section元素中可以包含article元素,并且article元素也可以将其内容分割为section.正如上一节所说,你需要考虑何时使用article,以及何时使用section.代码1.9是一个使用section的示

Excel2013数据透视表字段分组

  先插入一个数据透视表,在[插入]选项下,点击[数据透视表] 这里选择默认的设置就好了点击确定 将种类拖入行字段,数量拖入值字段,如图所示 现在我们可以看到数据透视表已经做好了,就差分组了 选中属于蔬菜的种类,按下Ctrl见可以选择不连续的多个单元格 点击[分析]选项下的[组选择] 你会看到出现了一个新的列,在种类2这里,我们更改类别名称为蔬菜 接着,我们选择其他的种类 同样的方法我们建立数据组2,将其重命名为水果 至此,我们的字段分组就做成了 分类: Excel教程