您好,登錄后才能下訂單哦!
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}
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內容請查看下面相關鏈接
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。