博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ordering犀利的比较器(6)
阅读量:6895 次
发布时间:2019-06-27

本文共 2175 字,大约阅读时间需要 7 分钟。

  hot3.png

 Ordering是Guava类库提供的一个犀利强大的比较器工具,Guava的Ordering和JDK Comparator相比功能更强。它非常容易扩展,可以轻松构造复杂的comparator,然后用在容器的比较、排序等操作中。

  本质上来说,Ordering 实例无非就是一个特殊的Comparator 实例。Ordering只是需要依赖于一个比较器(例如,Collections.max)的方法,并使其可作为实例方法。另外,Ordering提供了链式方法调用和加强现有的比较器。

  下面我们看看Ordering中的一些具体方法和简单的使用实例。

  常见的静态方法:

  natural():使用Comparable类型的自然顺序, 例如:整数从小到大,字符串是按字典顺序;

  usingToString() :使用toString()返回的字符串按字典顺序进行排序;
  arbitrary() :返回一个所有对象的任意顺序, 即compare(a, b) == 0 就是 a == b (identity equality)。 本身的排序是没有任何含义, 但是在VM的生命周期是一个常量。

package com.smart.guava;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
 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
 naturalOrdering = Ordering.natural();        Ordering
 usingToStringOrdering = Ordering.usingToString();        Ordering arbitraryOrdering = Ordering.arbitrary();        System.out.println("naturalOrdering:" + naturalOrdering.sortedCopy(list));        System.out.println("usingToStringOrdering:" + usingToStringOrdering.sortedCopy(list));        System.out.println("arbitraryOrdering:" + arbitraryOrdering.sortedCopy(list));    }}

操作方法:

  reverse(): 返回与当前Ordering相反的排序:

  nullsFirst(): 返回一个将null放在non-null元素之前的Ordering,其他的和原始的Ordering一样;
  nullsLast():返回一个将null放在non-null元素之后的Ordering,其他的和原始的Ordering一样;
  compound(Comparator):返回一个使用Comparator的Ordering,Comparator作为第二排序元素,例如对bug列表进行排序,先根据bug的级别,再根据优先级进行排序;
  lexicographical():返回一个按照字典元素迭代的Ordering;
  onResultOf(Function):将function应用在各个元素上之后, 在使用原始ordering进行排序;
  greatestOf(Iterable iterable, int k):返回指定的第k个可迭代的最大的元素,按照这个从最大到最小的顺序。是不稳定的。
  leastOf(Iterable<E> iterable,int k):返回指定的第k个可迭代的最小的元素,按照这个从最小到最大的顺序。是不稳定的。
  isOrdered(Iterable):是否有序,Iterable不能少于2个元素。
  isStrictlyOrdered(Iterable):是否严格有序。请注意,Iterable不能少于两个元素。
  sortedCopy(Iterable):返回指定的元素作为一个列表的排序副本。

转载于:https://my.oschina.net/gaowm/blog/513933

你可能感兴趣的文章
关于nginx架构探究(2)
查看>>
记一次线上gc调优的过程
查看>>
js判断是否处于隐藏状态
查看>>
VS2012 未找到与约束 contractName Microsoft.visualStudio.Text.ITextDocumentFactoryService.... 匹配的导出...
查看>>
一张图了解Python
查看>>
C++专题(三)
查看>>
背包问题(01背包,完全背包,多重背包)
查看>>
洛谷——P2040 打开所有的灯
查看>>
磁盘管理
查看>>
ES6学习笔记之 let与const
查看>>
UIWebView中javascript与Objective-C交互、获取摄像头
查看>>
poj 3461 Oulipo(KMP模板题)
查看>>
libavcodev may be vulnerable or is not supported, and should be updated for play video
查看>>
ECMAScript 5 —— Function 类型 (二)
查看>>
Java Web 自动登录
查看>>
IOS中文本框输入自动隐藏和自动显示
查看>>
邮件发送封装方法
查看>>
网络安全维护九眼智能大数据显身手
查看>>
算法导论笔记——第二十章 van Emde Boas树
查看>>
TCP的三次握手/四次挥手
查看>>