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

 更新时间:2018年12月08日 11:23:16   作者:执笔记忆的空白  
今天小编就为大家分享一篇关于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}

总结

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

相关文章

  • java图搜索算法之DFS与BFS详解

    java图搜索算法之DFS与BFS详解

    这篇文章主要为大家介绍了java数据结构中可以秒杀一切图算法的DFS与BFS作用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • Java Socket实现多人聊天系统

    Java Socket实现多人聊天系统

    这篇文章主要为大家详细介绍了Java Socket实现多人聊天系统,具有图形界面,实现文件传输功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Java用POI导入导出Excel实例分析

    Java用POI导入导出Excel实例分析

    在本篇文章里小编给大家整理的是一篇关于Java用POI导入导出Excel实例分析内容,有需要的朋友们可以跟着学习下。
    2021-11-11
  • Java设计模式之命令模式(Command模式)介绍

    Java设计模式之命令模式(Command模式)介绍

    这篇文章主要介绍了Java设计模式之命令模式(Command模式)介绍,本文讲解了Command模式的定义、如何使用命令模式等内容,需要的朋友可以参考下
    2015-03-03
  • 详解Mybatis注解写法(附10余个常用例子)

    详解Mybatis注解写法(附10余个常用例子)

    这篇文章主要介绍了详解Mybatis注解写法(附10余个常用例子),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Java 20在Windows11系统下的简易安装教程

    Java 20在Windows11系统下的简易安装教程

    这篇文章主要给大家介绍了关于Java 20在Windows11系统下的简易安装教程,学习Java的同学,第一步就是安装好Java环境,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • SpringMVC4.3 HttpMessageConverter接口实现源码分析

    SpringMVC4.3 HttpMessageConverter接口实现源码分析

    这篇文章主要为大家介绍了SpringMVC4.3 HttpMessageConverter接口实现源码分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 使用spring动态获取接口的不同实现类

    使用spring动态获取接口的不同实现类

    这篇文章主要介绍了使用spring动态获取接口的不同实现类,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • IDEA热部署配置详细教程

    IDEA热部署配置详细教程

    这篇文章主要介绍了IDEA热部署配置详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Java Comparable及Comparator接口区别详解

    Java Comparable及Comparator接口区别详解

    这篇文章主要介绍了Java Comparable及Comparator接口区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07

最新评论