国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

List集合中對(duì)數(shù)據(jù)實(shí)現(xiàn)多重規(guī)則進(jìn)行排序的案例

2024-07-14 08:43:06
字體:
供稿:網(wǎng)友

List集合進(jìn)行排序時(shí),很多人會(huì)考慮冒泡、快速等排序算法,但是對(duì)于多重排序規(guī)則的話,算法就不太適用了。其實(shí)java.util.Collections已經(jīng)提供了sort的排序方法,并且能自己實(shí)現(xiàn)其排序規(guī)則。

現(xiàn)在有個(gè)場景:我需要對(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ī)則排序測試類 */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)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 张北县| 双峰县| 丰都县| 公主岭市| 綦江县| 离岛区| 遵义县| 武宁县| 宜阳县| 丰都县| 永安市| 阳新县| 确山县| 汝城县| 闽清县| 库伦旗| 乃东县| 仁布县| 肃南| 遂平县| 华坪县| 寿宁县| 景谷| 龙川县| 米泉市| 正定县| 南澳县| 那坡县| 临桂县| 博客| 剑川县| 隆昌县| 抚松县| 塔城市| 汤阴县| 宜昌市| 唐河县| 柳州市| 桐城市| 青州市| 青州市|