一、Ordering排序类简介

排序器 Ordering 是 Guava流畅风格比较器 Comparator 的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能。

从实现上说,Ordering 实例就是一个特殊的 Comparator 实例。Ordering 把很多基于 Comparator 的静态方法(如 Collections.max)包装为自己的实例方法(非静态方法),并且提供了链式调用方法,来定制和增强现有的比较器。

二、常用方法

1. 创建排序器:

常见的排序器可以由下面的静态方法创建

方法 描述
natural() 对可排序类型做自然排序,如数字按大小,日期按先后排序
usingToString() 按对象的字符串形式做字典排序 [lexicographical ordering]
from(Comparator) 把给定的 Comparator 转化为排序器

2. 链式调用方法

通过链式调用,可以由给定的排序器衍生出其它排序器

方法 描述
reverse() 获取语义相反的排序器
nullsFirst() 使用当前排序器,但额外把 null 值排到最前面。
nullsLast() 使用当前排序器,但额外把 null 值排到最后面。
compound(Comparator) 合成另一个比较器,以处理当前排序器中的相等情况。
lexicographical() 基于处理类型T的排序器,返回该类型的可迭代对象 Iterable<T> 的排序器。
onResultOf(Function) 对集合中元素调用 Function,再按返回值用当前排序器排序。
Ordering<Foo> ordering = Ordering.natural().nullsFirst().onResultOf(sortKeyFunction)

3. 运用排序器

Guava 的排序器实现有若干操纵集合或元素值的方法

方法 描述 另请参见
greatestOf(Iterable iterable, int k) 获取可迭代对象中最大的 k 个元素。 leastOf
isOrdered(Iterable) 判断可迭代对象是否已按排序器排序:允许有排序值相等的元素。 isStrictlyOrdered
sortedCopy(Iterable) 判断可迭代对象是否已严格按排序器排序:不允许排序值相等的元素。 immutableSortedCopy
min(E, E) 返回两个参数中最小的那个。如果相等,则返回第一个参数。 max(E, E)
min(E, E, E, E...) 返回多个参数中最小的那个。如果有超过一个参数都最小,则返回第一个最小的参数。 max(E, E, E, E...)
min(Iterable) 返回迭代器中最小的元素。如果可迭代对象中没有元素,则抛出 NoSuchElementException。 max(Iterable), min(Iterator), max(Iterator)

4. 所有方法

方法类型 方法描述
static Ordering<Object>

allEqual()

返回一个Ordering,所有值的排序地位都是平等的,表明无排序。 将此排序传递给任何稳定排序算法都不会导致元素顺序发生变化。

static Ordering<Object>

arbitrary()

返回所有对象的任意顺序,即compare(a, b) == 0 就是 a == b (identity equality)。 本身的排序是没有任何含义,但是在VM的生命周期是一个常量。

int

binarySearch(List<? extends T> sortedList, T key)

已过时,请使用 Collections.binarySearch(List, Object, Comparator).

abstract int

compare(T left, T right)

比较两个参数的顺序。

<U extends T>Ordering<U>

compound(Comparator<? super U> secondaryComparator)

返回一个Ordering,传入比较器作为第二排序元素。

static <T> Ordering<T>

compound(Iterable<? extends Comparator<? super T>> comparators)

返回一个Ordering,会根据传入比较器集合一次比较,直到找到一个非零的结果。

static <T> Ordering<T>

explicit(List<T> valuesInOrder)

返回一个Ordering,根据他们出现在给定的列表的顺序比较对象

static <T> Ordering<T>

explicit(T leastValue, T... remainingValuesInOrder)

返回一个Ordering,比较对象根据它们的传入的顺序。

static <T> Ordering<T>

from(Comparator<T> comparator)

返回一个传入comparator实例的Ordering。

static <T> Ordering<T>

from(Ordering<T> ordering)

已过时。 不需要使用它

<E extends T> List<E>

greatestOf(Iterable<E> iterable, int k)

根据Ordering对传入iterable由大到小排序,返回前K位的集合。

<E extends T> List<E>

greatestOf(Iterator<E> iterator, int k)

根据Ordering对传入iterable由大到小排序,返回前K位的集合。

<E extends T>ImmutableList<E>

immutableSortedCopy(Iterable<E> elements)

返回一个不可变的集合,包含根据Ordering对传入元素排序后的所有元素。

boolean

isOrdered(Iterable<? extends T> iterable)

根据Ordering对传入iterable元素迭代,如果下一个元素大于或等于上一个元素,返回true。

boolean

isStrictlyOrdered(Iterable<? extends T> iterable)

根据Ordering对传入iterable元素迭代,如果下一个元素严格大于上一个元素,返回true。

<E extends T> List<E>

leastOf(Iterable<E> iterable, int k)

根据Ordering对传入iterable由小到大排序,返回前K位的集合。

<E extends T> List<E>

leastOf(Iterator<E> iterator, int k)

根据Ordering对传入iterable由小到大排序,返回前K位的集合。

<S extends T>Ordering<Iterable<S>>

lexicographical()

返回一个新的Ordering,通过相应的元素两两迭代,直到找到一个非零的结果。强加“字典顺序”。

<E extends T> E

max(E a, E b)

根据Ordering返回传入参数的最大值。

<E extends T> E

max(E a, E b, E c, E... rest)

根据Ordering返回传入参数的最大值。

<E extends T> E

max(Iterable<E> iterable)

根据Ordering返回传入参数的最大值。

<E extends T> E

max(Iterator<E> iterator)

根据Ordering返回传入参数的最大值。

<E extends T> E

min(E a, E b)

根据Ordering返回传入参数的最小值。

<E extends T> E

min(E a, E b, E c, E... rest)

根据Ordering返回传入参数的最小值。

<E extends T> E

min(Iterable<E> iterable)

根据Ordering返回传入参数的最小值。

E<E extends T> E

min(Iterator<E> iterator)

根据Ordering返回传入参数的最小值。

static <C extendsComparable> Ordering<C>

natural()

对可排序类型做自然排序,如数字按大小,日期按先后排序

<S extends T>Ordering<S>

nullsFirst()

根据Ordering排序,null值放在最前面,并使用它来比较非空值。

<S extends T>Ordering<S>

nullsLast()

根据Ordering排序,null值放在最后面,并使用此排序来比较非空值。

<F> Ordering<F>

onResultOf(Function<F,? extends T> function)

将传入function应用到每个元素上面,再通过Ordering进行排序。

<S extends T>Ordering<S>

reverse()

返回与当前Ordering相反的排序。相当于 Collections.reverseOrder(Comparator)。

<E extends T> List<E>

sortedCopy(Iterable<E> elements)

返回一个可变的集合,包含根据Ordering对传入元素排序后的所有元素。

static Ordering<Object>

usingToString()

根据toString返回的字符串按照字典顺序排序。

Ordering<Comparable> ordering = Ordering.natural();
List<Integer> ints = Lists.newArrayList(5, 3, 0, 9);
assertEquals(9, (int) ordering.max(ints));
assertEquals(0, (int) ordering.min(ints));assertEquals(9, (int) ordering.max(ints.iterator()));

Ordering 排序类 - Google Guava相关推荐

  1. Guava Ordering 排序类

    前言: Guava工程是Google开发的Java核心依赖库,例如:集合 [collections] .缓存 [caching] .原生类型支持 [primitives support] .并发库 [ ...

  2. Table 类 - Google Guava

    一.Table简介 Table 代表一个特殊的映射,其中两个键可以在组合的方式被指定为单个值.它类似于创建映射的映射. 通常来说,当你想使用多个键做索引的时候,你可能会用类似 Map<First ...

  3. Google Guava官方教程(中文版)gu

    Google Guava官方教程(中文版) 原文链接  译文链接 译者: 沈义扬,罗立树,何一昕,武祖  校对:方腾飞 引言 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库, ...

  4. [Google Guava]--Ordering类

    简介: Ordering(排序)可以被看作是一个丰富的比较具有增强功能的链接,多个实用方法,多类型排序功能等. 类声明 以下是com.google.common.collect.Ordering< ...

  5. [Google Guava] 排序: Guava强大的”流畅风格比较器”

    原文链接 译者: 沈义扬 排序器[Ordering]是Guava流畅风格比较器[Comparator]的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能. 从实现上说,Ordering实例就是 ...

  6. Google Guava 工具集__3__ Ordering犀利的比较器 Object方法

    Google Guava 工具集 博客栏目链接:Google Guava 博客栏目 博客栏目涉及演示代码 GitHub 地址: 点击打开Guava 演示代码包 Ordering是Guava类库提供的一 ...

  7. Guava ---- Ordering排序工具

    使用Guava的排序工具类, 快速实现对象的单变量排序和多变量排序, 让你的开发效率爆炸... import com.google.common.collect.Lists; import com.g ...

  8. java工具谷歌工具-Google guava工具类的介绍和使用

    工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率.谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来.所以就诞生了guava. guava的优点: 高效设计 ...

  9. [Google Guava] 2.4-集合扩展工具类

    原文链接 译文链接 译者:沈义扬,校对:丁一 简介 有时候你需要实现自己的集合扩展.也许你想要在元素被添加到列表时增加特定的行为,或者你想实现一个Iterable,其底层实际上是遍历数据库查询的结果集 ...

最新文章

  1. 图像降维之MDS特征抽取方法
  2. C语言从0到1·数据类型及其存储
  3. 一个插排引发的设计思想 (三) 委托与事件
  4. Django框架之DRF get post put delete 使用简单示例 (利用序列化反序列化)
  5. 小腿训练三部曲(二)
  6. 12个很棒的Spring数据教程来启动您的数据项目
  7. vscode如何连接新设备_台州要用“超级平台”连接300万台工业设备,成为全省新示范...
  8. 降低深度学习开发门槛,“动态图+高层API”能带来多大的便利?
  9. ASP.NET中WEB上弹出消息框的N种方法(为了以后方便,转了很多网友的文章!希望不会介意)...
  10. 12.Linux 高性能服务器编程 --- 高性能 IO 框架库 Libevent
  11. excel单元格内容拆分_Excel技巧:帮你把单元格内容颠倒顺序显示
  12. ireport 实现动态合并单元格
  13. 济南钢城四中2021高考成绩查询,武汉高中排行榜分数线2021
  14. 80C51单片机的串行通信技术
  15. 惠普ZBook 14u G5(3XG37PA)电脑 Hackintosh 黑苹果efi引导文件
  16. go 切片排序以及转为带间隔符的字符串
  17. petalinux2018.3安装步骤
  18. Django 多表操作
  19. js 中的SetTimeOut()
  20. 华语乐坛十二大伤感情歌手

热门文章

  1. 简述介绍Spring MVC 框架
  2. iOS ---- Xcode Search Paths相关配置
  3. 各浏览器的用户代理字符串整理
  4. 基于瑞芯微芯片RK3399学习
  5. 抖音SEO排名优化源代码开发搭建技术分析
  6. git push不上去
  7. TCP 协议面试灵魂10问,建议收藏~
  8. selenium 无头模式访问
  9. Microsoft Media Foundation官方文档翻译(一)《Microsoft Media Foundation》
  10. 怎样清除excel中的公式