Guava学习笔记之排序

来源:互联网 发布:三星平板下载软件 编辑:程序博客网 时间:2024/06/03 17:21

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

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

创建排序器:

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

链式调用方法:

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

运用排序器:

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

代码:

Ordering<Person> ordering = Ordering.natural()        .reverse()        .nullsLast()        .onResultOf((person) -> {            if (person == null) {                return null;            }            return person.getName();        });List<Person> list = new ArrayList<>();list.add(new Person("zhangsan"));list.add(new Person("Lisi"));list.add(null);list.add(new Person("Lisi"));list.add(new Person("wangwu"));List<Person> orderedList = ordering.sortedCopy(list);for (Person person : orderedList) {    System.out.println(person);}

结果:

name:zhangsanname:wangwuname:Lisiname:Lisinull
0 0
原创粉丝点击