最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java Collections 排序--多條件排序實例

 更新時間:2020年09月16日 09:46:32   作者:李大白lzy  
這篇文章主要介紹了java Collections 排序--多條件排序實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

我就廢話不多說了,大家還是直接看代碼吧~

// 告警排序
Collections.sort(domesticAirport, comparator);

// 告警排序
Comparator<AirportRtWeatherWarningBeanForTable> comparator = new Comparator<AirportRtWeatherWarningBeanForTable>() {
@Override
public int compare(AirportRtWeatherWarningBeanForTable a1, AirportRtWeatherWarningBeanForTable a2) {
      // 首先根據(jù)是否過期排序
      if(a1.isMetarExpired() && !a2.isMetarExpired()){
        return 1;
      }else if (!a1.isMetarExpired() && a2.isMetarExpired()) {
        return -1;
      } else if ((a1.isMetarExpired() && a2.isMetarExpired()) || (!a1.isMetarExpired() && !a2.isMetarExpired())) {
        //同時過期,或者都不過期,則按告警類型排序
        if (a1.getWarningColor() != a2.getWarningColor()) {
          return compareColor(a1.getWarningColor(), a2.getWarningColor());
        }
      }
      //告警類型相同,按字母排序
      return a1.getCode4().compareTo(a2.getCode4());
    }
  };

  // 告警類型比較排序
  public int compareColor(Color color1, Color color2) {
    int i = 0;
    int j = 0;

    if (color1.equals(MeteoWeatherWarningPanel.RED)) {
      i = 3;
    } else if (color1.equals(MeteoWeatherWarningPanel.YELLOW)) {
      i = 2;
    } else if (color1.equals(MeteoWeatherWarningPanel.GREEN)) {
      i = 1;
    }

    if (color2.equals(MeteoWeatherWarningPanel.RED)) {
      j = 3;
    } else if (color2.equals(MeteoWeatherWarningPanel.YELLOW)) {
      j = 2;
    } else if (color2.equals(MeteoWeatherWarningPanel.GREEN)) {
      j = 1;
    }
    int k = i - j;
    if (k > 0) {
      return -1;
    } else if (k < 0) {
      return 1;
    } else
      return 0;
  }

補充知識:Collections.sort多字段排序-指定排序方式-指定排序字段

看代碼吧~

1、創(chuàng)建需要排序的字段數(shù)組

String [] sortNameArr = {“one”, “tow”,“startDate”};

2、為每個字段執(zhí)行排序規(guī)則

boolean[] isAs = {false, false, false};

3、重寫sort方法進行排序

ListUtils.sort(list, sortNameArr, isAs);

public static <E> void sort(List<E> list, final String[] sortnameArr, final boolean[] typeArr) {
    if (sortnameArr.length != typeArr.length) {
      throw new RuntimeException("屬性數(shù)組元素個數(shù)和升降序數(shù)組元素個數(shù)不相等");
    }
    Collections.sort(list, new Comparator<E>() {
      public int compare(E a, E b) {
        int ret = 0;
        try {
          for (int i = 0; i < sortnameArr.length; i++) {
            ret = ListUtils.compareObject(sortnameArr[i], typeArr[i], a, b);
            if (0 != ret) {
              break;
            }
          }
        } catch (Exception e) {
          e.printStackTrace();
        }
        return ret;
      }
    });
  }

  private static <E> int compareObject(final String sortname, final boolean isAsc, E a, E b) throws Exception {
    int ret;
    Object value1 = ListUtils.forceGetFieldValue(a, sortname);
    Object value2 = ListUtils.forceGetFieldValue(b, sortname);
    // 兩個字段都不為空進行排序
    if (null != value1 && null != value2) {
      String str1 = value1.toString();
      String str2 = value2.toString();
      if (value1 instanceof Number && value2 instanceof Number) {
        int maxlen = Math.max(str1.length(), str2.length());
        str1 = ListUtils.addZero2Str((Number) value1, maxlen);
        str2 = ListUtils.addZero2Str((Number) value2, maxlen);
      } else if (value1 instanceof Date && value2 instanceof Date) {
      // 日期排序
        long time1 = ((Date) value1).getTime();
        long time2 = ((Date) value2).getTime();
        int maxlen = Long.toString(Math.max(time1, time2)).length();
        str1 = ListUtils.addZero2Str(time1, maxlen);
        str2 = ListUtils.addZero2Str(time2, maxlen);
      }
      if (isAsc) {
        ret = str1.compareTo(str2);
      } else {
        ret = str2.compareTo(str1);
      }
      return ret;
    } else if (null == value1 && null != value2) {
    // 比值為空 被比值大
      ret = 1;
    } else {
    // 被比值為空比值打
      ret = -1;
    }
    return ret;
  }

  public static String addZero2Str(Number numObj, int length) {
    NumberFormat nf = NumberFormat.getInstance();
    // 設置是否使用分組
    nf.setGroupingUsed(false);
    // 設置最大整數(shù)位數(shù)
    nf.setMaximumIntegerDigits(length);
    // 設置最小整數(shù)位數(shù)
    nf.setMinimumIntegerDigits(length);
    return nf.format(numObj);

  }

  public static Object forceGetFieldValue(Object obj, String fieldName) throws Exception {
    Field field = obj.getClass().getDeclaredField(fieldName);
    Object object = null;
    boolean accessible = field.isAccessible();
    if (!accessible) {
      // 如果是private,protected修飾的屬性,需要修改為可以訪問的
      field.setAccessible(true);
      object = field.get(obj);
      // 還原private,protected屬性的訪問性質
      field.setAccessible(accessible);
      return object;
    }
    object = field.get(obj);
    return object;
  }

以上這篇java Collections 排序--多條件排序實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 一文帶你搞懂Java中Get和Post的使用

    一文帶你搞懂Java中Get和Post的使用

    這篇文章主要為大家詳細介紹了Java中Get和Post用法的相關資料,文中的示例代碼講解詳細,對我們學習Java有一定的幫助,需要的可以參考一下
    2022-11-11
  • 詳解Java實現(xiàn)的k-means聚類算法

    詳解Java實現(xiàn)的k-means聚類算法

    這篇文章主要介紹了詳解Java實現(xiàn)的k-means聚類算法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Spring Boot整合EasyExcel(完整版包含上傳解析excel和下載模板)

    Spring Boot整合EasyExcel(完整版包含上傳解析excel和下載模板)

    這篇文章主要介紹了Spring Boot整合EasyExcel(完整版包含上傳解析excel和下載模板),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Java基礎知識精通數(shù)組的使用

    Java基礎知識精通數(shù)組的使用

    數(shù)組對于每一門編程語言來說都是重要的數(shù)據(jù)結構之一,當然不同語言對數(shù)組的實現(xiàn)及處理也不盡相同。Java?語言中提供的數(shù)組是用來存儲固定大小的同類型元素
    2022-04-04
  • SpringBoot?集成短信和郵件的配置示例詳解

    SpringBoot?集成短信和郵件的配置示例詳解

    這篇文章主要介紹了SpringBoot?集成短信和郵件的相關知識,項目中使用lombok插件和swagger依賴,無相關依賴的請自行修改,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • Spring BeanDefinition使用介紹

    Spring BeanDefinition使用介紹

    BeanDefinition是Spring框架中非常核心的概念,BeanDefinition是定義Bean的配置元信息接口,Spring根據(jù)BeanDefinition來定義Bean對象,簡單說就是對Bean信息的定義
    2023-01-01
  • java編寫Http服務器下載工具

    java編寫Http服務器下載工具

    這篇文章主要介紹了java編寫Http服務器下載工具的方法,工具很簡單,功能也很簡單,代碼就更簡潔了,卻非常實用,有需要的小伙伴參考下吧。
    2015-03-03
  • java poi判斷excel是xlsx還是xls類型

    java poi判斷excel是xlsx還是xls類型

    這篇文章主要為大家詳細介紹了如何利用java poi來判斷excel是xlsx還是xls類型,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下
    2024-10-10
  • 淺談java基本數(shù)據(jù)類型的范圍(分享)

    淺談java基本數(shù)據(jù)類型的范圍(分享)

    下面小編就為大家?guī)硪黄獪\談java基本數(shù)據(jù)類型的范圍(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • java設計模式之委派模式原理分析

    java設計模式之委派模式原理分析

    這篇文章主要介紹了java設計模式之委派模式原理分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10

最新評論

德保县| 伊金霍洛旗| 庄浪县| 红河县| 汉源县| 宁城县| 孙吴县| 抚松县| 漳浦县| 丰县| 山丹县| 南漳县| 慈溪市| 蓬溪县| 吉隆县| 开封市| 阿巴嘎旗| 长治市| 漳州市| 苏尼特左旗| 高尔夫| 屏东县| 安龙县| 东方市| 贵溪市| 铜山县| 重庆市| 博乐市| 涪陵区| 咸阳市| 淮滨县| 苗栗市| 中牟县| 乌兰县| 东山县| 封丘县| 榆林市| 临夏市| 额敏县| 临夏县| 青海省|