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.pswp.cn/news/539769.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539769.shtml
英文地址,請注明出處:http://en.pswp.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 布局的實現 (便于后…