首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >List数据多重规则排序

List数据多重规则排序

作者头像
执笔记忆的空白
发布2020-12-25 14:44:14
1K0
发布2020-12-25 14:44:14
举报
文章被收录于专栏:Java日常Java日常

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多重规则排序测试类
 * @author : shijing
 * 2017年5月3日上午11:00:51
 */
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;
		}
        
    }
}

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-05-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档