java Collections 排序--多条件排序实例
我就废话不多说了,大家还是直接看代码吧~
//告警排序 Collections.sort(domesticAirport,comparator); //告警排序 Comparatorcomparator=newComparator (){ @Override publicintcompare(AirportRtWeatherWarningBeanForTablea1,AirportRtWeatherWarningBeanForTablea2){ //首先根据是否过期排序 if(a1.isMetarExpired()&&!a2.isMetarExpired()){ return1; }elseif(!a1.isMetarExpired()&&a2.isMetarExpired()){ return-1; }elseif((a1.isMetarExpired()&&a2.isMetarExpired())||(!a1.isMetarExpired()&&!a2.isMetarExpired())){ //同时过期,或者都不过期,则按告警类型排序 if(a1.getWarningColor()!=a2.getWarningColor()){ returncompareColor(a1.getWarningColor(),a2.getWarningColor()); } } //告警类型相同,按字母排序 returna1.getCode4().compareTo(a2.getCode4()); } }; //告警类型比较排序 publicintcompareColor(Colorcolor1,Colorcolor2){ inti=0; intj=0; if(color1.equals(MeteoWeatherWarningPanel.RED)){ i=3; }elseif(color1.equals(MeteoWeatherWarningPanel.YELLOW)){ i=2; }elseif(color1.equals(MeteoWeatherWarningPanel.GREEN)){ i=1; } if(color2.equals(MeteoWeatherWarningPanel.RED)){ j=3; }elseif(color2.equals(MeteoWeatherWarningPanel.YELLOW)){ j=2; }elseif(color2.equals(MeteoWeatherWarningPanel.GREEN)){ j=1; } intk=i-j; if(k>0){ return-1; }elseif(k<0){ return1; }else return0; }
补充知识:Collections.sort多字段排序-指定排序方式-指定排序字段
看代码吧~
1、创建需要排序的字段数组
String[]sortNameArr={“one”,“tow”,“startDate”};
2、为每个字段执行排序规则
boolean[]isAs={false,false,false};
3、重写sort方法进行排序
ListUtils.sort(list,sortNameArr,isAs);
publicstaticvoidsort(List list,finalString[]sortnameArr,finalboolean[]typeArr){ if(sortnameArr.length!=typeArr.length){ thrownewRuntimeException("属性数组元素个数和升降序数组元素个数不相等"); } Collections.sort(list,newComparator (){ publicintcompare(Ea,Eb){ intret=0; try{ for(inti=0;i intcompareObject(finalStringsortname,finalbooleanisAsc,Ea,Eb)throwsException{ intret; Objectvalue1=ListUtils.forceGetFieldValue(a,sortname); Objectvalue2=ListUtils.forceGetFieldValue(b,sortname); //两个字段都不为空进行排序 if(null!=value1&&null!=value2){ Stringstr1=value1.toString(); Stringstr2=value2.toString(); if(value1instanceofNumber&&value2instanceofNumber){ intmaxlen=Math.max(str1.length(),str2.length()); str1=ListUtils.addZero2Str((Number)value1,maxlen); str2=ListUtils.addZero2Str((Number)value2,maxlen); }elseif(value1instanceofDate&&value2instanceofDate){ //日期排序 longtime1=((Date)value1).getTime(); longtime2=((Date)value2).getTime(); intmaxlen=Long.toString(Math.max(time1,time2)).length(); str1=ListUtils.addZero2Str(time1,maxlen); str2=ListUtils.addZero2Str(time2,maxlen); } if(isAsc){ ret=str1.compareTo(str2); }else{ ret=str2.compareTo(str1); } returnret; }elseif(null==value1&&null!=value2){ //比值为空被比值大 ret=1; }else{ //被比值为空比值打 ret=-1; } returnret; } publicstaticStringaddZero2Str(NumbernumObj,intlength){ NumberFormatnf=NumberFormat.getInstance(); //设置是否使用分组 nf.setGroupingUsed(false); //设置最大整数位数 nf.setMaximumIntegerDigits(length); //设置最小整数位数 nf.setMinimumIntegerDigits(length); returnnf.format(numObj); } publicstaticObjectforceGetFieldValue(Objectobj,StringfieldName)throwsException{ Fieldfield=obj.getClass().getDeclaredField(fieldName); Objectobject=null; booleanaccessible=field.isAccessible(); if(!accessible){ //如果是private,protected修饰的属性,需要修改为可以访问的 field.setAccessible(true); object=field.get(obj); //还原private,protected属性的访问性质 field.setAccessible(accessible); returnobject; } object=field.get(obj); returnobject; }
以上这篇javaCollections排序--多条件排序实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。