List集合中对数据实现多重规则进行排序的案例
List集合进行排序时,很多人会考虑冒泡、快速等排序算法,但是对于多重排序规则的话,算法就不太适用了。其实java.util.Collections已经提供了sort的排序方法,并且能自己实现其排序规则。
现在有个场景:我需要对一批优惠券进行排序,优惠券有三个属性:是否可用、券类型、面额。我需要将可用的、券类型最大的、面额最大的券排到最前面。
即优先按是否可用排序,其次是券类型,再者就是面额。
话不多说,看代码吧:
packagecom.test; importjava.math.BigDecimal; importjava.util.ArrayList; importjava.util.Collections; importjava.util.Comparator; /** *List多重规则排序测试类 */ publicclassTestCompartor{ publicstaticvoidmain(String[]args){ ArrayListpersons=newArrayList (); persons.add(newCoupon(13,0,newBigDecimal(40))); persons.add(newCoupon(13,0,newBigDecimal(50))); persons.add(newCoupon(13,0,newBigDecimal(45))); persons.add(newCoupon(1,0,newBigDecimal(20))); persons.add(newCoupon(13,1,newBigDecimal(30))); persons.add(newCoupon(1,0,newBigDecimal(25))); persons.add(newCoupon(11,0,newBigDecimal(50))); persons.add(newCoupon(11,1,newBigDecimal(40))); System.out.println("排序之前:"); for(inti=0;i (){ //按可用升序,券类型降序,面额降序 publicintcompare(Coupono1,Coupono2){ if(o1.valueAble.compareTo(o2.valueAble)==0){ if(o2.themeType.compareTo(o1.themeType)==0){ returno2.amount.compareTo(o1.amount)>0?1:-1; }else{ returno2.themeType-o1.themeType; } }else{ returno1.valueAble-o2.valueAble; } } }); System.out.println("排序后结果:"); for(inti=0;i 至于封装工具类我就懒得弄了,有需要的自己封装吧。
这里如果用了Integer等封装类型,最好自己也做下非空处理。
排序之前:
Person{themeType=13,valueAble=0,amount=40}Person{themeType=13,valueAble=0,amount=50}Person{themeType=13,valueAble=0,amount=45}Person{themeType=1,valueAble=0,amount=20}Person{themeType=13,valueAble=1,amount=30}Person{themeType=1,valueAble=0,amount=25}Person{themeType=11,valueAble=0,amount=50}Person{themeType=11,valueAble=1,amount=40}
排序后结果:
Person{themeType=13,valueAble=0,amount=50}Person{themeType=13,valueAble=0,amount=45}Person{themeType=13,valueAble=0,amount=40}Person{themeType=11,valueAble=0,amount=50}Person{themeType=1,valueAble=0,amount=25}Person{themeType=1,valueAble=0,amount=20}Person{themeType=13,valueAble=1,amount=30}Person{themeType=11,valueAble=1,amount=40}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接