LANG-667 Add a Null-safe compare() method to ObjectUtils
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@1056124 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
4fb355a838
commit
f4f07d5ace
|
@ -288,11 +288,7 @@ public class ObjectUtils {
|
|||
* </ul>
|
||||
*/
|
||||
public static <T extends Comparable<? super T>> T min(T c1, T c2) {
|
||||
if (c1 != null && c2 != null) {
|
||||
return c1.compareTo(c2) < 1 ? c1 : c2;
|
||||
} else {
|
||||
return c1 != null ? c1 : c2;
|
||||
}
|
||||
return compare(c1, c2, true) <= 0 ? c1 : c2;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -309,11 +305,45 @@ public class ObjectUtils {
|
|||
* </ul>
|
||||
*/
|
||||
public static <T extends Comparable<? super T>> T max(T c1, T c2) {
|
||||
if (c1 != null && c2 != null) {
|
||||
return c1.compareTo(c2) >= 0 ? c1 : c2;
|
||||
return compare(c1, c2, false) >= 0 ? c1 : c2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Null safe comparison of Comparables.
|
||||
*
|
||||
* @param c1 the first comparable, may be null
|
||||
* @param c2 the second comparable, may be null
|
||||
* @return a negative value if c1 < c2, zero if c1 = c2
|
||||
* and a positive value if c1 > c2
|
||||
*/
|
||||
public static <T extends Comparable<? super T>> int compare(T c1, T c2) {
|
||||
return compare(c1, c2, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Null safe comparison of Comparables.
|
||||
*
|
||||
* @param c1 the first comparable, may be null
|
||||
* @param c2 the second comparable, may be null
|
||||
* @param nullGreater if true <code>null</code> is considered greater
|
||||
* than a Non-<code>null</code> value or if false <code>null</code> is
|
||||
* considered less than a Non-<code>null</code> value
|
||||
* @return a negative value if c1 < c2, zero if c1 = c2
|
||||
* and a positive value if c1 > c2
|
||||
* @see java.lang.Comparator#compare(Object, Object)
|
||||
*/
|
||||
public static <T extends Comparable<? super T>> int compare(T c1, T c2, boolean nullGreater) {
|
||||
int result = 0;
|
||||
if ((c1 == null) || (c2 == null)) {
|
||||
if (nullGreater) {
|
||||
result = (c1 == null ? 1 : 0) - (c2 == null ? 1 : 0);
|
||||
} else {
|
||||
result = (c1 == null ? -1 : 0) - (c2 == null ? -1 : 0);
|
||||
}
|
||||
} else {
|
||||
return c1 != null ? c1 : c2;
|
||||
result = c1.compareTo(c2);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -216,6 +216,27 @@ public class ObjectUtilsTest extends TestCase {
|
|||
assertNull( ObjectUtils.min((String)null, (String)null) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests {@link ObjectUtils#compare(Comparable, Comparable, boolean)}.
|
||||
*/
|
||||
public void testCompare() {
|
||||
Integer one = Integer.valueOf(1);
|
||||
Integer two = Integer.valueOf(2);
|
||||
Integer nullValue = null;
|
||||
|
||||
assertEquals("Null Null false", 0, ObjectUtils.compare(nullValue, nullValue));
|
||||
assertEquals("Null Null true", 0, ObjectUtils.compare(nullValue, nullValue, true));
|
||||
|
||||
assertEquals("Null one false", -1, ObjectUtils.compare(nullValue, one));
|
||||
assertEquals("Null one true", 1, ObjectUtils.compare(nullValue, one, true));
|
||||
|
||||
assertEquals("one Null false", 1, ObjectUtils.compare(one, nullValue));
|
||||
assertEquals("one Null true", -1, ObjectUtils.compare(one, nullValue, true));
|
||||
|
||||
assertEquals("one two false", -1, ObjectUtils.compare(one, two));
|
||||
assertEquals("one two true", -1, ObjectUtils.compare(one, two, true));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests {@link ObjectUtils#clone(Object)} with a cloneable object.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue