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;
}
}
}
至於封裝工具類我就懶得弄了,有需要的自己封裝吧。
相關文章
- 【MySQL】批次修改排序規則MySql排序
- 資料庫建庫時字符集和排序規則的選擇資料庫排序
- Cephfs資料池資料物件命名規則解析物件
- 主資料之編碼規則
- SQLServer的排序規則(字符集編碼)SQLServer排序
- Window資料夾,檔案命名規則
- oracle資料隱式轉換規則Oracle
- JS資料型別轉換規則JS資料型別
- 資料的集合處理,有哪些規則?
- scope-sentry-資料洩露規則提取
- 資料架構需要遵守哪些規則呢?架構
- python如何將list排序Python排序
- 關於mysql字符集及排序規則設定MySql排序
- 改造 layui 表格元件實現多重排序UI元件排序
- Java基礎系列—List排序Java排序
- List根據時間排序排序
- 資料探勘( TO DO LIST)
- 資料包如何遊走於 Iptables 規則之間?
- 使用DDD規格Specification模式構建資料驅動規則引擎 - jonblankenship模式
- 外掛後臺表單無法按照所寫規則排序排序
- 符合 iview 資料規則的省市區三級聯動View
- 正確使用資料架構的五條規則 - infoworld架構
- 規則
- 上海資料交易所:2023年全球資料跨境流動規則全景圖
- 大資料:美團酒旅實時資料規則引擎應用實踐大資料
- MyBatis中批量插入資料,多重forEach迴圈MyBatis
- 在建立應用程式時,將資料隱私和合規性放在首位有多重要?
- Java List集合去重、過濾、分組、獲取資料、求最值、合併、排序、跳資料和遍歷Java排序
- List排序Collections.sort 重寫compare排序
- python用List的內建函式list.sort進行排序Python函式排序
- Python資料型別——列表(List)Python資料型別
- List集合按照由小到大排序或者由大到小排序排序
- 正則匹配規則2
- 分散式超大規模資料的實時快速排序演算法分散式排序演算法
- 結構與演算法(04):排序規則與查詢演算法演算法排序
- ESlint規則EsLint
- url規則
- makefile規則
- MySQL-排序資料MySql排序