[技术翻译]Guava官方文档Ordering
关于排序
Guava的链式比较器
例子
assertTrue(byLengthOrdering.reverse().isOrdered(list));
梗概
Ordering是Guava的链式比较器类,可以被用作构造复杂的比较器,并应用到collection对象。
它的本质就仅仅是一个特殊的比较器实例。Ordering仅仅是执行一些依赖一个比较器的方法(譬如 Collections.max),并且把这些方法作为实例的的方法使用。Ordering类提供一些方法去调整和加强已经存在的比较器。
怎样创建一个Ordering
普通的orderings由下面的静态方法创建。
Method |
Description |
将能比较的对象按照自然顺序排序 |
|
使用toString()返回的字符串按字典顺序进行排序 |
|
使用一个已经存在的比较器 |
但是,去创建一个Ordering 更一般的方法是完全跳过Comparator,直接去继承一个Ordering抽象类。
链式比较
Ordering<String> byLengthOrdering = new Ordering<String>() {
public int compare(String left, String right) {
return Ints.compare(left.length(), right.length());
}
};
给予一个Ordering就能被包装,去获得派生的Orderings.下面是一些经常用到的变体方法。
Method |
Description |
返回一个顺序相反的Ordering. |
|
返回一个Ordering.,非空值优先输出,其余和最初的Ordering一样 |
|
当第一个比较器比较相等时使用第二个比较器。 |
|
Returns an Ordering that orders iterables lexicographically by their elements. 返回一个比较器,按照字典顺序遍历它的元素 |
|
返回一个比较器,它将函数应用到它的元素,然后按照最初的比较器将元素排序。 |
譬如,当你想要一个能将下面的类比较的比较器。。。
class Foo {
@Nullable String sortedBy;
int notSortedBy;
}
它能处理空的sortedBy。这儿是一种建立在链式方法的解决方案。
Ordering<Foo> ordering = Ordering.natural().nullsFirst().onResultOf(new Function<Foo, String>() {
public String apply(Foo foo) {
return foo.sortedBy;
}
});
当读到一个链式Ordering.的时候,从右往左看。上面的例子对Foo的实例排序是按照查找他们的属性值sortedBy,首先移动非空值到顶部,然后对他们的其余值进行排序。从后往前看是因为每一个链式调用都是包装前一个Ordering 成为一个新的Ordering 。
(从后向前看法则的特例:若是链条中有compound,从左向后读。为了避免迷惑,不要将包含 compound的调用和别的链式调用混合在一起。)
太长的链式不容易理解,我们建议像例子那样将链式限制在3个回调。即使如此,你仍可以像Function 的实例那样通过分割出中间对象来简化链式。
Ordering<Foo> ordering = Ordering.natural().nullsFirst().onResultOf(sortKeyFunction);
关于应用
Guava提供许多方法去利用ordering 处理和检查值或者集合。我们在下面列出以下一些经常用到的。
Method |
Description |
See also |
Returns the k greatest elements of the specified iterable, according to this ordering, in order from greatest to least. Not necessarily stable. |
||
Tests if the specified Iterable is in nondecreasing order according to this ordering. |
||
Returns a sorted copy of the specified elements as a List. |
||
Returns the minimum of its two arguments according to this ordering. If the values compare as equal, the first argument is returned. |
||
Returns the minimum of its arguments according to this ordering. If there are multiple least values, the first is returned. |
||
Returns the minimum element of the specified Iterable. Throws a NoSuchElementException if theIterable is empty. |
[技术翻译]Guava官方文档Ordering的更多相关文章
- 我为什么要翻译ES6官方文档
ES6出来很久了,现在网上也有很多教程,其中以阮一峰老师的教程最为经典.大家通过学习阮老师的教程肯定能学懂ES6最新的技术. ES6官方文档是一个规范,各浏览器在实现ES6的具体API时都会遵循它.我 ...
- 为开源社区尽一份力,翻译RocketMQ官方文档
正如在上一篇文章中写道:"据我所知,现在RocketMQ还没有中文文档.我打算自己试着在github上开一个项目,自行翻译."我这几天抽空翻译了文档的前3个小节,发现翻译真的不是一 ...
- Apache Flume入门指南[翻译自官方文档]
声明: 根据官方文档选择性的翻译了下,不对请指正 https://flume.apache.org/FlumeUserGuide.html
- 自己翻译 delegation 官方文档
什么是代理,知道怎么用,见过N次.会用代理传值,还不够.代理到底是用来干嘛的嘛?还是看看官方文档吧,自己翻译出来看看是不是通顺 代理: 代理是一个简单高效的模式,尤其是一个类在编程的过程中代表或者需要 ...
- [翻译]PyMongo官方文档
PyMongo官方文档翻译 周煦辰 2016-06-30 这是本人翻译的PyMongo官方文档.现在网上分(抄)享(袭)的PyMongo博客文章很多,一方面这些文章本就是抄袭的,谈不上什么格式美观,另 ...
- [翻译]Android官方文档 - 通知(Notifications)
翻译的好辛苦,有些地方也不太理解什么意思,如果有误,还请大神指正. 官方文档地址:http://developer.android.com/guide/topics/ui/notifiers/noti ...
- Android Support Library 23.2介绍(翻译自官方文档)
Android Support Library 23.2 (译者注:本文标注了部分文字链接,但须要***,要查看全部链接.请查看sukey=014c68f407f2d3e181b6b5e665f26a ...
- 【Android开发】Android Host详解(翻译自官方文档)
原文:http://android.eoe.cn/topic/summary 文档内容 API概述 Android中manifest文件需求 工作的设备 * 发现设备 * 获得和设备进行“交流”的权限 ...
- Guava官方文档-RateLimiter类
转载自并发编程网 – ifeve.com RateLimiter 从概念上来讲,速率限制器会在可配置的速率下分配许可证.如果必要的话,每个acquire() 会阻塞当前线程直到许可证可用后获取该许可证 ...
随机推荐
- Struts2 cookie的存取
/** * Cookieの追加 * @return * @throws Exception */ private void addCookie(String name,String value){ C ...
- linux eclipse c++配置
安装cdt: https://www.eclipse.org/cdt/downloads.php 新建一个c++工程,运行发生错误: Eclipse CDT launch failed.Binary ...
- 【Java&Android开源库代码剖析】のandroid-smart-image-view
Android应用开发已经进入到相对成熟的阶段,特别在国外,涌现出了各式各样的成熟稳定的开源库,供普通开发者使用.这种情况虽然极大加速了app开发的进程,但同时带来的问题是大多数普通开发者在使用这些开 ...
- GitHub上线Trending功能,帮你轻松找到有潜力的开源项目
转自:http://www.csdn.net/article/2013-08-14/2816574-Github-Trending-Open-Source-Project Github开源项目 摘要: ...
- 数据结构(线段树):Educational Codeforces Round 6 620E. New Year Tree
E. New Year Tree time limit per test 3 seconds memory limit per test 256 megabytes input standard in ...
- WebBrowser控件默认使用IE9,IE10的方法
1,打开注册表 HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER) SOFTWARE Microsoft Internet E ...
- 查看 AndroidManifest.xml文件
1.Manifest Explorer 装在Android手机中,用此apk看系统中已安装应用的AndroidManifest.xml文件: protected boolean configForPa ...
- 关于sed中的Pattern Space和Hold Space的随笔
首先是一部分概念和示例,这部分转自:http://coolshell.cn/articles/9104.html Pattern Space 第零个是关于-n参数的,大家也许没看懂,没关系,我们来看一 ...
- Sort Colors —— LeetCode
Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...
- 解决mysql不能远程登录的问题
1. 改表法.可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 " ...