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多重规则排序测试类
  • @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;
    }

    }
    }

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

转载于:https://blog.51cto.com/13545923/2053324

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QQ显示服务器繁忙2013,在QQ空间发表日志的之后为什么样总是显示“服务器繁忙”?...

据小米方面介绍&#xff0c;小米手机认证空间帐号自2013年5月21日开通以来&#xff0c;框架&#xff0c;8mm加厚钢化玻璃&#xff0c;15mm防火板材质机壳3、在QQ空间发表日志的之后为什么总是显示“服务器繁忙”&#xff0c;发表不了日志&#xff1f;这个难题在我家电脑下终于存…

http sxyk.cdn_Discuz x3 开启cdn和https后链接修改教程

Discuz x3 开启cdn和https后链接修改教程开启支持https主要需要修改一下几个地方1. 、查找修改文件discuz_application.PHP &#xff1a;source/class/discuz/discuz_application.php (约第 187 行处)&#xff1a; 查找&#xff1a;$_G[isHTTPS] ($_SERVER[HTTPS] && …

8.4. su - root

add a user to wheel group rootfreebsd:~ # pw usermod neo -G wheel rootfreebsd:~ # id neo uid1001(neo) gid1001(neo) groups1001(neo),0(wheel)freebsd# grep wheel /etc/group wheel:*:0:root,neo原文出处&#xff1a;Netkiller 系列 手札 本文作者&#xff1a;陈景峯 转…

oracle更改编码

背景&#xff1a;win764bit英文操作系统&#xff08;支持中文&#xff09;   oracle11G默认安装   从ZHS16GBK字符集导入数据库表现&#xff1a;plsql显示为乱码解决&#xff1a;1、查看并更改数据库的编码为ZHS16GBK $sqlplus system/oracleSQL> select * from v$nls…

she is so css什么意思,输入she is so什么意思 微信she is so什么梗

最近很多人都在微信玩she is so的小游戏&#xff0c;会出现很多不同的形容词很有趣&#xff0c;适合好友之间一起玩。而不少人也不明白输入she is so是什么意思&#xff1f;该怎么玩呢&#xff1f;下文具体介绍。微信输入she is so是什么意思在微信聊天对话框中输入she /he is …

transformer论文解读_【论文解读】ICLR2020 | 深度自适应Transformer

作者 | kaiyuan 整理 | NewBeeNLP一篇来自ICLR2020&#xff0c;facebook人工智能实验室的论文&#xff0c;关于改进Transformer推理速度的。论文地址&#xff1a;https://arxiv.org/abs/1910.10073写在前面大模型在困难任务上表现非常好&#xff0c;而小模型也可以在比较简单…

vs2017下开发C++MFC动态库实现

2019独角兽企业重金招聘Python工程师标准>>> 今天无意间浏览了一些关于vs2017新功能的介绍&#xff0c;特别是微软发部了Visual Studio Installer&#xff0c;这个集成安装工具简约的操作风格&#xff0c;丰富vs开发内容&#xff0c;真正打通了开发的“最后一公里”…

hadoop为什么出现

在很多领域里面&#xff0c;在现在这个时代下面&#xff0c;很多公司产生的数据太多了&#xff0c;数据量太大了。用原来的技术去做&#xff0c;有种捉襟见肘的感觉&#xff0c;要么在性能上面&#xff0c;要么在速度上面遇到了瓶颈&#xff0c;这个时候需要新的技术来解决&…

微信视频开发jquery mobile

功能 微信企业号里开发一个微视频功能&#xff0c;用于播放视频。技术 J2EE&#xff0c;前端ui是jquerymobile&#xff0c;HTML5&#xff0c;CSS3&#xff0c;开源视频插件&#xff1a;mediaelement-and-player.min.js 插件官网&#xff1a;http://www.mediaelementjs.com/视…

python加密程序_Python 简单的可逆加密程序

简单加密1.[代码][Python]代码#codingutf-8Description: 可逆的加密与解密Environment: python2.5.xAuthor:idehonggmail.comimport osimport sysclass Code(object):可逆的加密与解密def __init__(self, key "idehonggmail.com"):self.__src_key keyself.__key s…

eclipse中tomcat服务器locations不能修改,解决eclipse中Tomcat服务器的server location选项不能修改的问题...

解决eclipse中Tomcat服务器的server location选项不能修改的问题问题描述编辑tomcat服务器时&#xff0c;server locations无法编辑&#xff0c;如下图&#xff1a;解决方法在Eclipse菜单栏中选择window — show view — server 可以看到服务的面板&#xff0c;服务面板中可看到…

当create table as select 遇上大数据

统计24小时的红包感知专题&#xff0c;有1.5亿行以上的数据&#xff0c;Nokia给出的方法是先按小时执行算法&#xff0c;再汇总各个小时的执行结果。 算法中包含了大量的 sum(case when)计算。 专题里有5个小节&#xff0c;执行计划的时候&#xff0c;需要跑5次where条件不同…

mybatis源码分析(方法调用过程)

十一月月底&#xff0c;宿舍楼失火啦&#xff0c;搞得20多天没有网&#xff0c;目测直到放假也不会来了。。。 正题 嗯~&#xff0c;其实阅读源码不是为了应付面试&#xff0c;更重要的让你知道&#xff0c;大师是怎样去写代码的&#xff0c;同样是用Java&#xff0c;为啥Clint…

提取多个字段_动态合并多个工作表,数据再多也不怕

小伙伴们好啊&#xff0c;今天老祝和大家分享一个动态合并多个工作表的技巧。很多时候&#xff0c;咱们的数据是按照部门或是月份等项目&#xff0c;分别存放在不同工作表中的&#xff0c;要对这些数据进行分析汇总的时候&#xff0c;需要先将不同工作表中的数据合并到一起才可…

深入理解Oracle的并行操作【好文认真读】

请尊重原文作者&#xff0c;http://czmmiao.iteye.com/blog/1487568 -------------------------------------------------------------------------------- 并行&#xff08;Parallel&#xff09;和OLAP系统 并行的实现机制是&#xff1a;首先&#xff0c;Oracle会创建一个进…

服务器虚拟化性能瓶颈怎么办,如何突破虚拟化三大瓶颈

如果你希望在应用虚拟化技术的过程中不出现任何问题的话&#xff0c;那么显然这是不切合实际的期望。虚拟化技术能给你的数据中心带来诸多好处&#xff0c;但是为了可以利用虚拟化的优势&#xff0c;你需要了解可能会面对哪些问题。即使虚拟化技术已经被应用到了许多企业中&…

2017-2018-1 20155229 《信息安全系统设计基础》第十四周学习总结

2017-2018-1 20155229 《信息安全系统设计基础》第十四周学习总结 对“第三章 程序机器级表示”的深入学习 我选择这章的理由是第一次学的时候还是不太理解&#xff0c;老师也有说这章建议在认真学习&#xff0c;所以本周的学习任务是认真再次学习这一章c语言、汇编代码以及机器…

python中为什么推荐使用with_Python中的with关键字使用详解

这篇文章主要介绍了Python 中的with关键字使用详解的相关资料,在Python中,with关键字是一个替你管理实现上下文协议对象的好东西,需要的朋友可以参考下">在 Python 2.5 中&#xff0c; with 关键字被加入。它将常用的 try ... except ... finally ... 模式很方便的被复…

create table as select性能测试

转载自&#xff1a;http://blog.csdn.net/yangzhijun_cau/article/details/7396088 --------------------------------------------------------------------------------- 原表270W数据&#xff0c;无照片&#xff0c;字段比较多&#xff0c;有50个左右 测试机是一个虚拟机&a…

类似索引Model套Model之 iOS模型闲聊二

看下界面, 这是类似于索引的页面, 只不过木有右侧索引条的布局. 如果想了解通讯录索引的,请移步iOS - 高仿通讯录之商品索引排序搜索. 提供思路如下: 分析界面及接口用 MVC 设计模式来实现(其实核心点都在下面5)创建内外层 Model 并绑定两者 Model两者 Cell 布局的实现 (便于后…