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,如需转载请自行联系原作者