List集合中對(duì)數(shù)據(jù)實(shí)現(xiàn)多重規(guī)則進(jìn)行排序的案例
List集合進(jìn)行排序時(shí),很多人會(huì)考慮冒泡、快速等排序算法,但是對(duì)于多重排序規(guī)則的話,算法就不太適用了。其實(shí)java.util.Collections已經(jīng)提供了sort的排序方法,并且能自己實(shí)現(xiàn)其排序規(guī)則。
現(xiàn)在有個(gè)場(chǎng)景:我需要對(duì)一批優(yōu)惠券進(jìn)行排序,優(yōu)惠券有三個(gè)屬性:是否可用、券類型、面額。我需要將可用的、券類型最大的、面額最大的券排到最前面。
即優(yōu)先按是否可用排序,其次是券類型,再者就是面額。
話不多說,看代碼吧:
package com.test;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
/**
* List多重規(guī)則排序測(cè)試類
*/
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é)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- Java實(shí)現(xiàn)對(duì)兩個(gè)List快速去重并排序操作示例
- Java中對(duì)list map根據(jù)map某個(gè)key值進(jìn)行排序的方法
- Java針對(duì)ArrayList自定義排序的2種實(shí)現(xiàn)方法
- java中List對(duì)象列表實(shí)現(xiàn)去重或取出及排序的方法
- Java?Collections.sort()實(shí)現(xiàn)List排序的默認(rèn)方法和自定義方法
- java 中List按照date排序的實(shí)現(xiàn)
- Java對(duì)List進(jìn)行排序的兩種實(shí)現(xiàn)方法
- java ArrayList集合中的某個(gè)對(duì)象屬性進(jìn)行排序的實(shí)現(xiàn)代碼
- 用Java集合中的Collections.sort方法如何對(duì)list排序(兩種方法)
- Java中對(duì)list元素進(jìn)行排序的方法詳解
相關(guān)文章
gateway和jwt網(wǎng)關(guān)認(rèn)證實(shí)現(xiàn)過程解析
這篇文章主要介紹了gateway和jwt網(wǎng)關(guān)認(rèn)證實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
JFrame中添加和設(shè)置JPanel的方法實(shí)例解析
這篇文章主要介紹了JFrame中添加和設(shè)置JPanel的方法實(shí)例解析,具有一定借鑒價(jià)值2018-01-01
Java使用PDFBox實(shí)現(xiàn)調(diào)整PDF每頁格式
這篇文章主要為大家詳細(xì)介紹了Java如何使用PDFBox實(shí)現(xiàn)調(diào)整PDF每頁格式,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下2024-03-03
使用Java8進(jìn)行分組(多個(gè)字段的組合分組)
本文主要介紹了使用Java8進(jìn)行分組(多個(gè)字段的組合分組),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
SpringBoot公共頁面抽取方法實(shí)現(xiàn)過程介紹
這篇文章主要介紹了SpringBoot抽取公共頁面的方法實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-10-10

