List集合中對數(shù)據(jù)實現(xiàn)多重規(guī)則進行排序的案例
List集合進行排序時,很多人會考慮冒泡、快速等排序算法,但是對于多重排序規(guī)則的話,算法就不太適用了。其實java.util.Collections
已經(jīng)提供了sort
的排序方法,并且能自己實現(xiàn)其排序規(guī)則。
現(xiàn)在有個場景:我需要對一批優(yōu)惠券進行排序,優(yōu)惠券有三個屬性:是否可用、券類型、面額。我需要將可用的、券類型最大的、面額最大的券排到最前面。
即優(yōu)先按是否可用排序,其次是券類型,再者就是面額。
話不多說,看代碼吧:
package com.test; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; /** * List多重規(guī)則排序測試類 */ 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("排序后結(jié)果:"); for (int i = 0; i <persons.size(); i++) { System.out.println(persons.get(i)); } } static class Coupon{ public Integer themeType; //優(yōu)惠券類型 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}
排序后結(jié)果:
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}
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- Java實現(xiàn)對兩個List快速去重并排序操作示例
- Java中對list map根據(jù)map某個key值進行排序的方法
- Java針對ArrayList自定義排序的2種實現(xiàn)方法
- java中List對象列表實現(xiàn)去重或取出及排序的方法
- Java?Collections.sort()實現(xiàn)List排序的默認方法和自定義方法
- java 中List按照date排序的實現(xiàn)
- Java對List進行排序的兩種實現(xiàn)方法
- java ArrayList集合中的某個對象屬性進行排序的實現(xiàn)代碼
- 用Java集合中的Collections.sort方法如何對list排序(兩種方法)
- Java中對list元素進行排序的方法詳解
相關(guān)文章
Java Socket實現(xiàn)多人聊天系統(tǒng)
這篇文章主要為大家詳細介紹了Java Socket實現(xiàn)多人聊天系統(tǒng),具有圖形界面,實現(xiàn)文件傳輸功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07Java用POI導(dǎo)入導(dǎo)出Excel實例分析
在本篇文章里小編給大家整理的是一篇關(guān)于Java用POI導(dǎo)入導(dǎo)出Excel實例分析內(nèi)容,有需要的朋友們可以跟著學習下。2021-11-11Java設(shè)計模式之命令模式(Command模式)介紹
這篇文章主要介紹了Java設(shè)計模式之命令模式(Command模式)介紹,本文講解了Command模式的定義、如何使用命令模式等內(nèi)容,需要的朋友可以參考下2015-03-03Java?20在Windows11系統(tǒng)下的簡易安裝教程
這篇文章主要給大家介紹了關(guān)于Java?20在Windows11系統(tǒng)下的簡易安裝教程,學習Java的同學,第一步就是安裝好Java環(huán)境,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-07-07SpringMVC4.3?HttpMessageConverter接口實現(xiàn)源碼分析
這篇文章主要為大家介紹了SpringMVC4.3?HttpMessageConverter接口實現(xiàn)源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09使用spring動態(tài)獲取接口的不同實現(xiàn)類
這篇文章主要介紹了使用spring動態(tài)獲取接口的不同實現(xiàn)類,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02Java Comparable及Comparator接口區(qū)別詳解
這篇文章主要介紹了Java Comparable及Comparator接口區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-07-07