Java Guava排序器Ordering原理及代码实例

网友投稿 242 2023-02-21

Java Guava排序器Ordering原理及代码实例

一 创建排序器

排序器:可以用来为构建复杂的比较器,以完成集合排序的功能:

本质上来说,OrderingMqpMQ 实例无非就是一个特殊的Comparator 实例。

Ordering把很多基于Comparator的静态方法(如Collections.max)包装为自己的实例方法(非静态方法),

并且提供了链式调用方法,来定制和增强现有的比较器

//创建排序器

@Test

public void createOreing(){

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

Ordering natural = Ordering.natural();

//按对象的字符串形式做字典排序

Ordering.usingToString();

//把给定的Comparator转化为排序器或者继承Ordering实现自定义排序器

Ordering from = Ordering.from((Integer x, Integer y) -> Ints.compare(x, y));

System.out.println(from.max(5, 6));

}

二 扩展排序器,变换成其他功能排序器

//衍生其他排序器

@Test

public void anotherOreing(){

Ordering natural = Ordering.natural();

natural.max(1, 2); //2

//获取语义相反的排序器

natural.reverse().max(1, 2); //1

Listhttp:// list = Lists.newArrayList(5, 9, 3, 7, 4);

Collections.sort(list,natural.nullsFirst()); //使用排序器对集合排序

list.forEach(x-> System.out.print(x+", ")); //3, 4, 5, 7, 9

// 不使用这两个排序器,排序元素不能为null,否则会报空指针

natural.nullsFirst();//使用当前排序器,并把null值排到最前

natural.nullsLast();//使用当前排序器,并把null值排到最后

natural.compound(natural);//合成另一个比较器,以处理当前排序器中的相等情况,即添加第二个比较器

//onResultOf:将function应用在各个元素上之后, 在使用原始ordering进行排序

Collections.sort(list,natural.onResultOf(x->x*(-1)));//元素变为负数再排序

list.forEach(x-> System.out.print(x+", ")); //9, 7, 5, 4, 3

}

三 使用排序器

//使用排序器

http:// @Test

public void operOrdering(){

Ordering natural = Ordering.natural();

List list02 = Lists.newArrayList(6,4,9,3,1,5,3);

/**

* greatestOf: 获取可迭代对象中最大的k个元素,并按从大到小排序,返回一个集合

* leastOfL获取最小的几个,并按从小到大排序

*/

natural.greatestOf(list02,1).forEach(x-> System.out.println(x)); //9

natural.leastOf(list02,1).forEach(x-> System.out.println(x)); //1

//返回集合的一个排好序的副本

natural.sortedCopy(list02);

natural.immutableSortedCopy(list02); //返回不可变的排序副本

/**

* isOrdered: 判断是否已经按排序器有序,元素不能少于2,允许有相等元素

* isStrictlyOrdered: 是否严格排序,不允许有相等元素

*/

Collections.sort(list02,natural);

natural.isOrdered(list02);//true

natural.isStrictlyOrdered(list02); //false

//其他直接比较元素

natural.compare(1,2);natural.max(5,6);natural.min(list02);

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:api免费接口平台哪个好(api免费接口平台哪个好)
下一篇:java实现删除某条信息并刷新当前页操作
相关文章

 发表评论

暂时没有评论,来抢沙发吧~