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;
}
}
}
至於封裝工具類我就懶得弄了,有需要的自己封裝吧。
相關文章
- 更改系統資料庫的排序規則資料庫排序
- SSIS 資料庫排序規則衝突問題資料庫排序
- SQL Server排序規則SQLServer排序
- SERVER的排序規則Server排序
- MySQL中的排序規則MySql排序
- 【MySQL】批次修改排序規則MySql排序
- 資料庫建庫時字符集和排序規則的選擇資料庫排序
- 陣列多重排序陣列排序
- Python 字串,list排序,刪除重複資料Python字串排序
- 資料預處理規則
- sqlserver2000排序規則SQLServer排序
- Cephfs資料池資料物件命名規則解析物件
- 主資料之編碼規則
- 資料探勘之關聯規則
- java 規則引擎資料彙集Java
- MySql Order By 多個欄位 排序規則MySql排序
- 使用DBV的命令規則和規則集強化資料庫安全資料庫
- oracle資料隱式轉換規則Oracle
- JS資料型別轉換規則JS資料型別
- 【MySQL】資料庫字元校對規則MySql資料庫字元
- Window資料夾,檔案命名規則
- SQLServer的排序規則(字符集編碼)SQLServer排序
- python list 排序Python排序
- 資料的集合處理,有哪些規則?
- 資料架構需要遵守哪些規則呢?架構
- 資料庫SQL開發命名規則 (轉)資料庫SQL
- Java中List的排序Java排序
- C# list物件排序C#物件排序
- 資料探勘(5):使用mahout做海量資料關聯規則挖掘
- Rational Performance Tester 資料關聯規則詳解ORM
- 資料庫設計和基本備份規則資料庫
- 11 個重要的資料庫設計規則資料庫
- scope-sentry-資料洩露規則提取
- 關於mysql字符集及排序規則設定MySql排序
- Sql Server 聯合查詢的排序規則衝突SQLServer排序
- 改造 layui 表格元件實現多重排序UI元件排序
- 陣列多重篩選條件排序方法陣列排序
- 資料探勘( TO DO LIST)