欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Guava排序器Ordering原理及代碼實例

 更新時間:2020年11月16日 11:43:38   作者:侯賽雷  
這篇文章主要介紹了Java Guava排序器Ordering原理及代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

一 創(chuàng)建排序器

排序器:可以用來為構(gòu)建復(fù)雜的比較器,以完成集合排序的功能:

本質(zhì)上來說,Ordering 實例無非就是一個特殊的Comparator 實例。

Ordering把很多基于Comparator的靜態(tài)方法(如Collections.max)包裝為自己的實例方法(非靜態(tài)方法),

并且提供了鏈式調(diào)用方法,來定制和增強現(xiàn)有的比較器

//創(chuàng)建排序器
  @Test
  public void createOreing(){
    //對可排序類型做自然排序,如數(shù)字按大小,日期按先后排序
    Ordering<Comparable> natural = Ordering.natural();
    //按對象的字符串形式做字典排序
    Ordering.usingToString();
    //把給定的Comparator轉(zhuǎn)化為排序器或者繼承Ordering實現(xiàn)自定義排序器
    Ordering<Integer> from = Ordering.from((Integer x, Integer y) -> Ints.compare(x, y));
    System.out.println(from.max(5, 6));
  }

二 擴展排序器,變換成其他功能排序器

//衍生其他排序器
  @Test
  public void anotherOreing(){
    Ordering<Comparable> natural = Ordering.natural();
    natural.max(1, 2); //2
    //獲取語義相反的排序器
    natural.reverse().max(1, 2); //1
    List<Integer> list = Lists.newArrayList(5, 9, 3, 7, 4);
    Collections.sort(list,natural.nullsFirst()); //使用排序器對集合排序
    list.forEach(x-> System.out.print(x+", ")); //3, 4, 5, 7, 9

    // 不使用這兩個排序器,排序元素不能為null,否則會報空指針
    natural.nullsFirst();//使用當前排序器,并把null值排到最前
    natural.nullsLast();//使用當前排序器,并把null值排到最后

    natural.compound(natural);//合成另一個比較器,以處理當前排序器中的相等情況,即添加第二個比較器

    //onResultOf:將function應(yīng)用在各個元素上之后, 在使用原始ordering進行排序
    Collections.sort(list,natural.onResultOf(x->x*(-1)));//元素變?yōu)樨摂?shù)再排序
    list.forEach(x-> System.out.print(x+", ")); //9, 7, 5, 4, 3
  }

三 使用排序器

//使用排序器
  @Test
  public void operOrdering(){
    Ordering<Comparable> natural = Ordering.natural();
    List<Integer> list02 = Lists.newArrayList(6,4,9,3,1,5,3);
    /**
     * greatestOf: 獲取可迭代對象中最大的k個元素,并按從大到小排序,返回一個集合
     * leastOfL獲取最小的幾個,并按從小到大排序
     */
    natural.greatestOf(list02,1).forEach(x-> System.out.println(x)); //9
    natural.leastOf(list02,1).forEach(x-> System.out.println(x)); //1
    //返回集合的一個排好序的副本
    natural.sortedCopy(list02);
    natural.immutableSortedCopy(list02); //返回不可變的排序副本
    /**
     * isOrdered: 判斷是否已經(jīng)按排序器有序,元素不能少于2,允許有相等元素
     * isStrictlyOrdered: 是否嚴格排序,不允許有相等元素
     */
    Collections.sort(list02,natural);
    natural.isOrdered(list02);//true
    natural.isStrictlyOrdered(list02); //false
    //其他直接比較元素
    natural.compare(1,2);natural.max(5,6);natural.min(list02);
  }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • javaweb實現(xiàn)在線支付功能

    javaweb實現(xiàn)在線支付功能

    這篇文章主要為大家詳細介紹了javaweb實現(xiàn)在線支付功能的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • JavaWeb Servlet實現(xiàn)網(wǎng)頁登錄功能

    JavaWeb Servlet實現(xiàn)網(wǎng)頁登錄功能

    這篇文章主要為大家詳細介紹了JavaWeb Servlet實現(xiàn)網(wǎng)頁登錄功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • springboot讀取配置文件中的參數(shù)具體步驟

    springboot讀取配置文件中的參數(shù)具體步驟

    在本篇文章里小編給大家分享了關(guān)于springboot讀取配置文件中的參數(shù)的相關(guān)知識點內(nèi)容,有需要的朋友們跟著學(xué)習(xí)下。
    2019-06-06
  • 深入理解Java設(shè)計模式之享元模式

    深入理解Java設(shè)計模式之享元模式

    這篇文章主要介紹了JAVA設(shè)計模式之享元模式的的相關(guān)資料,文中示例代碼非常詳細,供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2021-11-11
  • java?Collection集合接口的介紹和使用詳解

    java?Collection集合接口的介紹和使用詳解

    這篇文章主要為大家介紹了java?Collection集合接口的介紹和使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Java人機猜拳實現(xiàn)的思路及方法實例

    Java人機猜拳實現(xiàn)的思路及方法實例

    這篇文章主要給大家介紹了關(guān)于Java人機猜拳實現(xiàn)的思路及方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java中redisTemplate注入失敗NullPointerException異常問題解決

    Java中redisTemplate注入失敗NullPointerException異常問題解決

    這篇文章主要介紹了Java中redisTemplate注入失敗NullPointerException異常問題解決,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-08-08
  • 基于Springboot2.0構(gòu)建ES的多客戶端

    基于Springboot2.0構(gòu)建ES的多客戶端

    這篇文章主要為大家詳細介紹了基于Springboot2.0構(gòu)建ES的多客戶端,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • MyBatis詳細講解DAO代理的使用

    MyBatis詳細講解DAO代理的使用

    MyBatis允許只聲明一個dao接口,而無需寫dao實現(xiàn)類的方式實現(xiàn)數(shù)據(jù)庫操作。前提是必須保證Mapper文件中的<mapper>標簽的namespace屬性值必須要和dao接口的類路徑一致,MyBatis容器會自動通過動態(tài)代理生成接口的實現(xiàn)類
    2022-04-04
  • Spring Security OAuth 自定義授權(quán)方式實現(xiàn)手機驗證碼

    Spring Security OAuth 自定義授權(quán)方式實現(xiàn)手機驗證碼

    這篇文章主要介紹了Spring Security OAuth 自定義授權(quán)方式實現(xiàn)手機驗證碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02

最新評論