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

 更新时间:2020年11月16日 11:43:38   作者:侯赛雷  
这篇文章主要介绍了Java Guava排序器Ordering原理及代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一 创建排序器

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

本质上来说,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);
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring Security架构以及源码详析

    Spring Security架构以及源码详析

    这篇文章主要给大家介绍了关于Spring Security架构以及源码的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • MyBatis实现批量插入数据,多重forEach循环

    MyBatis实现批量插入数据,多重forEach循环

    这篇文章主要介绍了MyBatis实现批量插入数据,多重forEach循环方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Spring Boot小型项目如何使用异步任务管理器实现不同业务间的解耦

    Spring Boot小型项目如何使用异步任务管理器实现不同业务间的解耦

    这篇文章主要介绍了Spring Boot小型项目如何使用异步任务管理器实现不同业务间的解耦,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Java中正则表达式去除html标签

    Java中正则表达式去除html标签

    Java中正则表达式去除html的标签,主要目的更精确的显示内容,接下来通过本文给大家介绍Java中正则表达式去除html标签的方法,需要的朋友参考下
    2017-02-02
  • Java中实现分布式定时任务的方法

    Java中实现分布式定时任务的方法

    这篇文章主要介绍了Java中实现分布式定时任务,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 基于Spring AOP的Log收集汇总

    基于Spring AOP的Log收集汇总

    张三针对公司现有日志处理系统的不足,采用了SpringAOP技术和Redis存储,设计并实现了一个性能更高效的日志处理系统,该系统通过SpringAOP的切面拦截功能,捕获方法调用信息作为日志内容,并将其统一格式化后存储到Redis中
    2024-10-10
  • spring boot项目fat jar瘦身的实现

    spring boot项目fat jar瘦身的实现

    这篇文章主要介绍了spring boot项目fat jar瘦身的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • java  List循环与Map循环的总结

    java List循环与Map循环的总结

    这篇文章主要介绍了java List循环与Map循环的总结的相关资料,并附代码实例,帮助大家学习理解,需要的朋友可以参考下
    2016-11-11
  • 一文教会你使用jmap和MAT进行堆内存溢出分析

    一文教会你使用jmap和MAT进行堆内存溢出分析

    本文介绍关于jmap和MAT的使用来进行堆内存溢出分析,因为这个内存溢出是我们手动构造出来的,查找比较简单,真的到了生产上面需要我们仔细排除
    2021-09-09
  • idea微服务项目服务如何显示在同一窗口

    idea微服务项目服务如何显示在同一窗口

    本文介绍了如何在微服务项目导入时将所有服务加入同一窗口中,解决启动项目服务时显示不全的问题,通过点击左上角的View,选择ToolWindows,然后选择Services,使用快捷键Alt+8,选择Spring Boot,就可以将所有服务加到同一窗口中
    2025-02-02

最新评论