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}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接