读源码Apache-commons-lang3-3.1(二)-阿里云开发者社区

开发者社区> 技术小阿哥> 正文

读源码Apache-commons-lang3-3.1(二)

简介:
+关注继续查看

ObjectUtils类的基本static方法:

defaultIfNull(T,  T) 参数1为null,用参数2代替
firstNonNull(T...) 获取指定参数列表中第一个不为null的元素
equals(Object, Object)
notEqual(Object, Object)
hashCode(Object)
hashCodeMulti(Object...) 多对象hashcode生成策略
identityToString(Object)
identityToString(StringBuffer, Object)
toString(Object)
toString(Object, String)
min(T...) 获取指定参数列表中最小的元素
max(T...) 获取指定参数列表中最大的元素
compare(T, T) 比较两个参数大小,默认null小于任何不为null的值
compare(T, T, boolean) 比较两个参数大小,参数3设置null的大小,false为小于任何不为null的值true相反
median(T...) 以最佳猜测的方式获取参数列表中的中间值,如果列表数为偶数,则中间值取低位的值
median(Comparator<T>,  T...) 重载方法,提供最佳猜测的排序策略
mode(T...) 获取参数列表中最频繁出现的项
clone(T)
cloneIfPossible(T)

1.compare(T,T,boolean)对象比较的新策略。

 compare是静态方法,则ObjectUtils.compare(a, b, false)做比较。

 源代码:


1
2
3
4
5
6
7
8
9
10
11
public static <T extends Comparable<? super T>> int compare(T c1, T c2,
            boolean nullGreater) {
        if (c1 == c2) {
            return 0;
        else if (c1 == null) {
            return nullGreater ? 1 : -1;
        else if (c2 == null) {
            return nullGreater ? -1 1;
        }
        return c1.compareTo(c2);
    }

从源代码上分析,参数nullGreater为true时null大于任何不为null的对象,false时null小于任何不为null的对象。


2.median(Comparator<T>,  T...)和median(T...)

这两个方法重载,第一个方法提供了参数列表对象的排序策略,第二个方法采用了Java中Tree的默认排序策略。目的是找出参数序列的中间元素,如果参数序列元素数为偶数个则中间元素取低位的。


Range类,具有范围的对象。适合可比较对象,Range范围不可变,可以存在任意类型对象范围,范围内的元素类型应该保持一致。


Range类的基本静态方法:

访问方法
getMinimum() 获取最小元素
getMaximum() 获取最大元素
getComparator() 获取比较器对象
isNaturalOrdering() 判断是否是自然排序


元素类方法
contains(T) 判断T元素是否在对象访问类
isBefore(T) 判断T元素是否在对象最大范围之后
isAfter(T) 判断T元素是否在对象最小范围之前
isStartedBy(T) 判断T元素是否是对象范围开始元素,即T==minElement
isEndedBy(T) 判断T元素是否是对象范围结束元素,即T==maxElement
elementCompareTo(T) 判断T元素在对象访问的位置,返回int值,位置如:-1[minElement 0 maxElement]1




范围方法 下面方法的执行条件是范围元素类型一致且比较策略一致(compare)
containsRange(Range<T>) 参数范围对象是否包含在对象范围
isAfterRange(Range<T>) 参数范围对象是否在对象范围之前
isBeforeRange(Range<T>) 参数范围对象是否在对象范围之后
isOverlappedBy(Range<T>) 参数范围对象是否和对象范围有交集
intersectionWith(Range<T>) 求参数范围对象和对象范围的交集范围对象


1.Range类有一个final类型的Comparator<T> comparator属性对象,即一个不可变的范围对象需要提供一个比较策略。


2.Range类默认的比较策略为自然比较

源代码如下:

1
2
3
public int compare(Object obj1, Object obj2) {
            return ((Comparable) obj1).compareTo(obj2);
        }

  Range类和ObjectUtils类都是基于Object的实现,在管理对象方面有极大便利。




本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1282061,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
hbase源码系列(十四)Compact和Split
本文介绍hbase中的Compact和Split。
3480 0
k8s与网络--Flannel源码分析
之前在k8s与网络--Flannel解读一文中,我们主要讲了Flannel整体的工作原理。今天主要针对Flannel v0.10.0版本进行源码分析。首先需要理解三个比较重要的概念: 网络(Network):整个集群中分配给 flannel 要管理的网络地址范围 子网(Subnet):flanne.
1636 0
1月28日云栖精选夜读 | 终于等到你!阿里正式向 Apache Flink 贡献 Blink 源码
如同我们去年12月在 Flink Forward China 峰会所约,阿里巴巴内部 Flink 版本 Blink 将于 2019 年 1 月底正式开源。今天,我们终于等到了这一刻。
3920 0
[Android]从Launcher开始启动App流程源码分析
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5017056.html 从Launcher开始启动App流程源码分析 com.
613 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
8425 0
Apache Spark Delta Lake 事务日志实现源码分析
Apache Spark Delta Lake 事务日志实现源码分析 我们已经在这篇文章详细介绍了 Apache Spark Delta Lake 的事务日志是什么、主要用途以及如何工作的。那篇文章已经可以很好地给大家介绍 Delta Lake 的内部工作原理,原子性保证,本文为了学习的目的,带领大家从源码级别来看看 Delta Lake 事务日志的实现。
1609 0
android(cm11)状态栏源码分析(一)
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/50216563 (一):写在前面 最近由于工作需要,需要了解CM11中的有关于StatusBar相关的内容。
950 0
Java网络编程与NIO详解11:Tomcat中的Connector源码分析(NIO)
Tomcat 中的 NIO 源码分析 转自https://www.javadoop.com/post/tomcat-nio#toc1 之前写了两篇关于 NIO 的文章,第一篇介绍了 NIO 的 Channel、Buffer、Selector 使用,第二篇介绍了非阻塞 IO 和异步 IO,并展示了简单的用例。
1708 0
jquery源码系列:append方法实现过程
no1: // Define a local copy of jQuery var jQuery = function( selector, context ) {// The jQuery object is actually just the init constructor 'enhanced'return new jQuery.fn.init( selector, contex
1756 0
13694
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载