<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 64,comments - 22,trackbacks - 0
    轉(zhuǎn)自:http://www.cnblogs.com/peida/p/Guava_Ordering.html

    Ordering是Guava類庫(kù)提供的一個(gè)犀利強(qiáng)大的比較器工具,Guava的Ordering和JDK Comparator相比功能更強(qiáng)。它非常容易擴(kuò)展,可以輕松構(gòu)造復(fù)雜的comparator,然后用在容器的比較、排序等操作中。

      本質(zhì)上來(lái)說(shuō),Ordering 實(shí)例無(wú)非就是一個(gè)特殊的Comparator 實(shí)例。Ordering只是需要依賴于一個(gè)比較器(例如,Collections.max)的方法,并使其可作為實(shí)例方法。另外,Ordering提供了鏈?zhǔn)椒椒ㄕ{(diào)用和加強(qiáng)現(xiàn)有的比較器。

      下面我們看看Ordering中的一些具體方法和簡(jiǎn)單的使用實(shí)例。

      常見(jiàn)的靜態(tài)方法:

      natural():使用Comparable類型的自然順序, 例如:整數(shù)從小到大,字符串是按字典順序;
      usingToString() :使用toString()返回的字符串按字典順序進(jìn)行排序;
      arbitrary() :返回一個(gè)所有對(duì)象的任意順序, 即compare(a, b) == 0 就是 a == b (identity equality)。 本身的排序是沒(méi)有任何含義, 但是在VM的生命周期是一個(gè)常量。

      簡(jiǎn)單實(shí)例:

    復(fù)制代碼
    import java.util.List;
    import org.junit.Test;
    import com.google.common.collect.Lists;
    import com.google.common.collect.Ordering;
    
    public class OrderingTest {
    
        @Test
        public void testStaticOrdering(){
            List<String> list = Lists.newArrayList();
            list.add("peida");
            list.add("jerry");
            list.add("harry");
            list.add("eva");
            list.add("jhon");
            list.add("neron");
            
            System.out.println("list:"+ list);
    Ordering
    <String> naturalOrdering = Ordering.natural(); Ordering<Object> usingToStringOrdering = Ordering.usingToString(); Ordering<Object> arbitraryOrdering = Ordering.arbitrary(); System.out.println("naturalOrdering:"+ naturalOrdering.sortedCopy(list)); System.out.println("usingToStringOrdering:"+ usingToStringOrdering.sortedCopy(list)); System.out.println("arbitraryOrdering:"+ arbitraryOrdering.sortedCopy(list)); } }
    復(fù)制代碼

      輸出:

    list:[peida, jerry, harry, eva, jhon, neron]
    naturalOrdering:[eva, harry, jerry, jhon, neron, peida]
    usingToStringOrdering:[eva, harry, jerry, jhon, neron, peida]
    arbitraryOrdering:[neron, harry, eva, jerry, peida, jhon]

      操作方法:

      reverse(): 返回與當(dāng)前Ordering相反的排序:
      nullsFirst(): 返回一個(gè)將null放在non-null元素之前的Ordering,其他的和原始的Ordering一樣;
      nullsLast():返回一個(gè)將null放在non-null元素之后的Ordering,其他的和原始的Ordering一樣;
      compound(Comparator):返回一個(gè)使用Comparator的Ordering,Comparator作為第二排序元素,例如對(duì)bug列表進(jìn)行排序,先根據(jù)bug的級(jí)別,再根據(jù)優(yōu)先級(jí)進(jìn)行排序;
      lexicographical():返回一個(gè)按照字典元素迭代的Ordering;
      onResultOf(Function):將function應(yīng)用在各個(gè)元素上之后, 在使用原始o(jì)rdering進(jìn)行排序;
      greatestOf(Iterable iterable, int k):返回指定的第k個(gè)可迭代的最大的元素,按照這個(gè)從最大到最小的順序。是不穩(wěn)定的。
      leastOf(Iterable<E> iterable,int k):返回指定的第k個(gè)可迭代的最小的元素,按照這個(gè)從最小到最大的順序。是不穩(wěn)定的。
      isOrdered(Iterable):是否有序,Iterable不能少于2個(gè)元素。
      isStrictlyOrdered(Iterable):是否嚴(yán)格有序。請(qǐng)注意,Iterable不能少于兩個(gè)元素。
      sortedCopy(Iterable):返回指定的元素作為一個(gè)列表的排序副本。

    復(fù)制代碼
    package com.peidasoft.guava.base;
    
    import java.util.List;
    
    import org.junit.Test;
    
    import com.google.common.collect.ImmutableList;
    import com.google.common.collect.Lists;
    import com.google.common.collect.Ordering;
    
    public class OrderingTest {
        
        @Test
        public void testOrdering(){
            List<String> list = Lists.newArrayList();
            list.add("peida");
            list.add("jerry");
            list.add("harry");
            list.add("eva");
            list.add("jhon");
            list.add("neron");
            
            System.out.println("list:"+ list);
            
            Ordering<String> naturalOrdering = Ordering.natural();
            System.out.println("naturalOrdering:"+ naturalOrdering.sortedCopy(list));    
    
            List<Integer> listReduce= Lists.newArrayList();
            for(int i=9;i>0;i--){
                listReduce.add(i);
            }
            
            List<Integer> listtest= Lists.newArrayList();
            listtest.add(1);
            listtest.add(1);
            listtest.add(1);
            listtest.add(2);
            
            
            Ordering<Integer> naturalIntReduceOrdering = Ordering.natural();
            
            System.out.println("listtest:"+ listtest);
            System.out.println(naturalIntReduceOrdering.isOrdered(listtest));
            System.out.println(naturalIntReduceOrdering.isStrictlyOrdered(listtest));
            
            
            System.out.println("naturalIntReduceOrdering:"+ naturalIntReduceOrdering.sortedCopy(listReduce));
            System.out.println("listReduce:"+ listReduce);
            
            
            System.out.println(naturalIntReduceOrdering.isOrdered(naturalIntReduceOrdering.sortedCopy(listReduce)));
            System.out.println(naturalIntReduceOrdering.isStrictlyOrdered(naturalIntReduceOrdering.sortedCopy(listReduce)));
            
    
            Ordering<String> natural = Ordering.natural();
                  
            List<String> abc = ImmutableList.of("a", "b", "c");
            System.out.println(natural.isOrdered(abc));
            System.out.println(natural.isStrictlyOrdered(abc));
            
            System.out.println("isOrdered reverse :"+ natural.reverse().isOrdered(abc));
     
            List<String> cba = ImmutableList.of("c", "b", "a");
            System.out.println(natural.isOrdered(cba));
            System.out.println(natural.isStrictlyOrdered(cba));
            System.out.println(cba = natural.sortedCopy(cba));
            
            System.out.println("max:"+natural.max(cba));
            System.out.println("min:"+natural.min(cba));
            
            System.out.println("leastOf:"+natural.leastOf(cba, 2));
            System.out.println("naturalOrdering:"+ naturalOrdering.sortedCopy(list));    
            System.out.println("leastOf list:"+naturalOrdering.leastOf(list, 3));
            System.out.println("greatestOf:"+naturalOrdering.greatestOf(list, 3));
            System.out.println("reverse list :"+ naturalOrdering.reverse().sortedCopy(list));    
            System.out.println("isOrdered list :"+ naturalOrdering.isOrdered(list));
            System.out.println("isOrdered list :"+ naturalOrdering.reverse().isOrdered(list));
            list.add(null);
            System.out.println(" add null list:"+list);
            System.out.println("nullsFirst list :"+ naturalOrdering.nullsFirst().sortedCopy(list));
            System.out.println("nullsLast list :"+ naturalOrdering.nullsLast().sortedCopy(list));
        }
    
    }
    
    //============輸出==============
    list:[peida, jerry, harry, eva, jhon, neron]
    naturalOrdering:[eva, harry, jerry, jhon, neron, peida]
    listtest:[1, 1, 1, 2]
    true
    false
    naturalIntReduceOrdering:[1, 2, 3, 4, 5, 6, 7, 8, 9]
    listReduce:[9, 8, 7, 6, 5, 4, 3, 2, 1]
    true
    true
    true
    true
    isOrdered reverse :false
    false
    false
    [a, b, c]
    max:c
    min:a
    leastOf:[a, b]
    naturalOrdering:[eva, harry, jerry, jhon, neron, peida]
    leastOf list:[eva, harry, jerry]
    greatestOf:[peida, neron, jhon]
    reverse list :[peida, neron, jhon, jerry, harry, eva]
    isOrdered list :false
    isOrdered list :false
     add null list:[peida, jerry, harry, eva, jhon, neron, null]
    nullsFirst list :[null, eva, harry, jerry, jhon, neron, peida]
    nullsLast list :[eva, harry, jerry, jhon, neron, peida, null]
    復(fù)制代碼

    posted on 2014-07-03 10:48 hellxoul 閱讀(395) 評(píng)論(0)  編輯  收藏 所屬分類: Java

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲va久久久噜噜噜久久 | 国产精品亚洲二区在线| heyzo亚洲精品日韩| 国产亚洲精品国产福利在线观看| 国产精品免费精品自在线观看| 亚洲精品二区国产综合野狼| 免费视频爱爱太爽了| 黄色三级三级免费看| 久久久久亚洲AV无码专区首| 日韩成人免费aa在线看| 鲁丝片一区二区三区免费 | 国产a v无码专区亚洲av| 91短视频在线免费观看| 国产偷国产偷亚洲高清在线| 亚洲黄色片在线观看| 国产精品免费视频网站| 8x8x华人永久免费视频| 日本高清免费中文在线看| 亚洲女人影院想要爱| 国产av无码专区亚洲国产精品| 一本大道一卡二大卡三卡免费| 免费一级毛片在线播放| 鲁大师在线影院免费观看 | 老湿机一区午夜精品免费福利| 女性自慰aⅴ片高清免费| 久久免费高清视频| 亚洲精品乱码久久久久蜜桃 | 亚洲AV无码一区二区三区在线观看| 亚洲AV无码男人的天堂| 亚洲高清中文字幕综合网| 亚洲精品国精品久久99热| 日韩一区二区a片免费观看| 玖玖在线免费视频| 国产精品亚洲专区无码不卡| 亚洲国产av美女网站| 亚洲AV无码国产精品麻豆天美 | 日本免费中文字幕| 一级做α爱过程免费视频| 亚洲国产精品精华液| 亚洲国产成人99精品激情在线| 天天看免费高清影视|