评论

收藏

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

编程语言 编程语言 发布于:2021-10-06 18:18 | 阅读数:426 | 评论:0

今天小编就为大家分享一篇关于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<coupon> persons = new arraylist<coupon>();
  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 <persons.size(); i++) {
    system.out.println(persons.get(i));
  }
  system.out.println();
  collections.sort(persons, new comparator<coupon>() {
    //按可用升序,券类型降序,面额降序
    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 <persons.size(); 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}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对CodeAE代码之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/moneyshi/article/details/71108140

关注下面的标签,发现更多相似文章