zoukankan      html  css  js  c++  java
  • Guava中Ordering

    guava中Ordering类是对Compartor接口的实现,但它也只是一个抽象类.

    当调用Ordering.natural()方法时,它就会返回一个NaturalOrdering的对象,NaturalOrdering是对Ordering的继承.它其中的compare实现了相应的比较两个对象的方法.natural的比较方法是从小到大,对于字符串是字典序排序.与之类似的调用ordering.reverse(),ordering.nullsFirst方法会返回ReverseOrdering和NullsFirstOrdering对象.它们其中也都有compare方法.

    Ordering可以实现链式调用定义自己的排序器,当我们使用这样的语句时Ordering.natural().nullsFirst().reverse(),则会返回一个Ordering对象.它能够实现对List的从大到小,null在最后的比较操作.

    底层实现:

    首先Ordering.natural()会返回一个NaturalOrdering对象,然后调用该对象的nullsFirst()方法,该方法会调用NullsFirstOrdering(this)构造函数,返回一个NullsFirstOrdering对象.在该构造函数中,首先会将this放入它的私有属性中,然后在NullsFirstOrdering的compare方法中,它会判断两个比较的对象是否为空,若为空,则返回1或-1,否则就调用传入的NaturalOrdering对象的返回值.reverse()方法也是类似的,它会先将传入的NullsFirstOrdering对象放入私有属性中存储下来,然后在compare(a,b)方法中实现传入对象的compare(b,a),从而达到翻转的效果.从而可以看出,Ordering中的链式调用,实际上对上一个Ordering的层层封装.

  • 相关阅读:
    Vue实现添加、删除、关键字查询
    打开新页面 自定义方法并获取携带值
    unity3d 刷新速率
    unity3d AssetStore 下载的资源位置
    unity3d c# http 请求json数据解析
    unity3d 自定义载入条/载入动画
    课程改进意见
    梦断代码
    An internal error occurred during: "Launching MVC on Tomcat 7.x".
    n以内的1的个数
  • 原文地址:https://www.cnblogs.com/userrain/p/5317617.html
Copyright © 2011-2022 走看看