List集合中对数据实现多重规则进行排序的案例

网友投稿 243 2023-01-17


List集合中对数据实现多重规则进行排序的案例

List集合进行排序时,很多人会考虑冒泡、快速等排序算法,但是对于多重排序规则的话,算法就不太适用了。其实java.util.Collections已经提供了sort的排序方法,并且能自己实现其排序规则。

现在有个场景:我需要对一批优惠券进行排序,优惠券有三个属性:是否可用、券类型、面额。我需要将可用的、券类型最大的、面额最大的券排到最前面。

即优先按是否可用排序,其次是券类型,再者就是面额。

话不多说,看代码吧:

package com.test;

import java.math.BigDecimal;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

/**

* List多重规则排序测试类

*/

public class TestCompartor {

public static void main(String[] args) {

ArrayList persons = new ArrayList();

persons.add(new Coupon(13,0,new BigDecimal(40)));

persons.add(new Coupon(13,0,new BigDecimal(50)));

persons.add(new Coupon(13,0,new BigDecimal(45)));

persons.add(new Coupon(1,0,new BigDecimal(20)));

persons.add(new Coupon(13,1,new BigDecimal(30)));

persons.add(new Coupon(1,0,new BigDecimal(25)));

persons.add(new Coupon(11,0,new BigDecimal(50)));

persons.add(new Coupon(11,1,new BigDecimal(40)));

System.out.println("排序之前:");

for (int i = 0; i

System.out.println(persons.get(i));

}

System.out.println();

Collections.sort(persons, new Comparator() {

//按可用升序,券类型降序,面额降序

public int compare(Coupon o1, Coupon o2) {

if (o1.valueAble.compareTo(o2.valueAble)==0){

if(o2.themeType.compareTo(o1.themeType)==0){

return o2.amount.compareTo(o1.amount)>0?1:-1;

}else{

return o2.themeType - o1.themeType;

}

}else{

return o1.valueAble-o2.valueAble ;

}

}

});

System.out.println("排序后结果:");

for (int i = 0; i

System.out.println(persons.get(i));

}

}

static class Coupon{

public Integer themeType; //优惠券类型

public Integer valueAble; //可用 ,0 可用,1不可用

public BigDecimal amount; //面额

@Override

public String toString() {

return "Person{" +

"themeType=" + themeType +

", valueAble=" + valueAble +

", amount=" + amount +

'}';

}

public Coupon(Integer themeType, Integer valueAble, BigDecimal amount) {

super();

this.themeType = themeType;

this.valueAble = valueAble;

this.amount = amount;

}

}

}

至于封装工具类我就懒得弄了,有需要的自己封装吧。

这里如果用了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}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

System.out.println(persons.get(i));

}

System.out.println();

Collections.sort(persons, new Comparator() {

//按可用升序,券类型降序,面额降序

public int compare(Coupon o1, Coupon o2) {

if (o1.valueAble.compareTo(o2.valueAble)==0){

if(o2.themeType.compareTo(o1.themeType)==0){

return o2.amount.compareTo(o1.amount)>0?1:-1;

}else{

return o2.themeType - o1.themeType;

}

}else{

return o1.valueAble-o2.valueAble ;

}

}

});

System.out.println("排序后结果:");

for (int i = 0; i

System.out.println(persons.get(i));

}

}

static class Coupon{

public Integer themeType; //优惠券类型

public Integer valueAble; //可用 ,0 可用,1不可用

public BigDecimal amount; //面额

@Override

public String toString() {

return "Person{" +

"themeType=" + themeType +

", valueAble=" + valueAble +

", amount=" + amount +

'}';

}

public Coupon(Integer themeType, Integer valueAble, BigDecimal amount) {

super();

this.themeType = themeType;

this.valueAble = valueAble;

this.amount = amount;

}

}

}

至于封装工具类我就懒得弄了,有需要的自己封装吧。

这里如果用了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}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

System.out.println(persons.get(i));

}

}

static class Coupon{

public Integer themeType; //优惠券类型

public Integer valueAble; //可用 ,0 可用,1不可用

public BigDecimal amount; //面额

@Override

public String toString() {

return "Person{" +

"themeType=" + themeType +

", valueAble=" + valueAble +

", amount=" + amount +

'}';

}

public Coupon(Integer themeType, Integer valueAble, BigDecimal amount) {

super();

this.themeType = themeType;

this.valueAble = valueAble;

this.amount = amount;

}

}

}

至于封装工具类我就懒得弄了,有需要的自己封装吧。

这里如果用了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}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:可视化接口管理工具(可视化接口管理工具怎么用)
下一篇:上海欣诺通信研发管理平台(中诺通讯官网)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~