Java Guava排序器Ordering原理及代码实例
程序员文章站
2022-04-02 23:08:03
一 创建排序器排序器:可以用来为构建复杂的比较器,以完成集合排序的功能:本质上来说,ordering 实例无非就是一个特殊的comparator 实例。ordering把很多基于comparator的...
一 创建排序器
排序器:可以用来为构建复杂的比较器,以完成集合排序的功能:
本质上来说,ordering 实例无非就是一个特殊的comparator 实例。
ordering把很多基于comparator的静态方法(如collections.max)包装为自己的实例方法(非静态方法),
并且提供了链式调用方法,来定制和增强现有的比较器
//创建排序器 @test public void createoreing(){ //对可排序类型做自然排序,如数字按大小,日期按先后排序 ordering<comparable> natural = ordering.natural(); //按对象的字符串形式做字典排序 ordering.usingtostring(); //把给定的comparator转化为排序器或者继承ordering实现自定义排序器 ordering<integer> from = ordering.from((integer x, integer y) -> ints.compare(x, y)); system.out.println(from.max(5, 6)); }
二 扩展排序器,变换成其他功能排序器
//衍生其他排序器 @test public void anotheroreing(){ ordering<comparable> natural = ordering.natural(); natural.max(1, 2); //2 //获取语义相反的排序器 natural.reverse().max(1, 2); //1 list<integer> 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 }
三 使用排序器
//使用排序器 @test public void operordering(){ ordering<comparable> natural = ordering.natural(); list<integer> 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); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。