Copying from Collections to Lang
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@1154831 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
2276b288b8
commit
cebecbbca8
|
@ -0,0 +1,126 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.commons.collections.comparators;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Comparator;
|
||||||
|
|
||||||
|
import org.apache.commons.collections.ComparatorUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverses the order of another comparator by reversing the arguments
|
||||||
|
* to its {@link #compare(Object, Object) compare} method.
|
||||||
|
*
|
||||||
|
* @since Commons Collections 2.0
|
||||||
|
* @version $Revision$ $Date$
|
||||||
|
*
|
||||||
|
* @author Michael A. Smith
|
||||||
|
*
|
||||||
|
* @see java.util.Collections#reverseOrder()
|
||||||
|
*/
|
||||||
|
public class ReverseComparator<E> implements Comparator<E>, Serializable {
|
||||||
|
|
||||||
|
/** Serialization version from Collections 2.0. */
|
||||||
|
private static final long serialVersionUID = 2858887242028539265L;
|
||||||
|
|
||||||
|
/** The comparator being decorated. */
|
||||||
|
private final Comparator<E> comparator;
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Creates a comparator that compares objects based on the inverse of their
|
||||||
|
* natural ordering. Using this Constructor will create a ReverseComparator
|
||||||
|
* that is functionally identical to the Comparator returned by
|
||||||
|
* java.util.Collections.<b>reverseOrder()</b>.
|
||||||
|
*
|
||||||
|
* @see java.util.Collections#reverseOrder()
|
||||||
|
*/
|
||||||
|
public ReverseComparator() {
|
||||||
|
this(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a comparator that inverts the comparison
|
||||||
|
* of the given comparator. If you pass in <code>null</code>,
|
||||||
|
* the ReverseComparator defaults to reversing the
|
||||||
|
* natural order, as per
|
||||||
|
* {@link java.util.Collections#reverseOrder()}</b>.
|
||||||
|
*
|
||||||
|
* @param comparator Comparator to reverse
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public ReverseComparator(Comparator<E> comparator) {
|
||||||
|
this.comparator = comparator == null ? ComparatorUtils.NATURAL_COMPARATOR : comparator;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Compares two objects in reverse order.
|
||||||
|
*
|
||||||
|
* @param obj1 the first object to compare
|
||||||
|
* @param obj2 the second object to compare
|
||||||
|
* @return negative if obj1 is less, positive if greater, zero if equal
|
||||||
|
*/
|
||||||
|
public int compare(E obj1, E obj2) {
|
||||||
|
return comparator.compare(obj2, obj1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Implement a hash code for this comparator that is consistent with
|
||||||
|
* {@link #equals(Object) equals}.
|
||||||
|
*
|
||||||
|
* @return a suitable hash code
|
||||||
|
* @since Commons Collections 3.0
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return "ReverseComparator".hashCode() ^ comparator.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns <code>true</code> iff <i>that</i> Object is
|
||||||
|
* is a {@link Comparator} whose ordering is known to be
|
||||||
|
* equivalent to mine.
|
||||||
|
* <p>
|
||||||
|
* This implementation returns <code>true</code>
|
||||||
|
* iff <code><i>object</i>.{@link Object#getClass() getClass()}</code>
|
||||||
|
* equals <code>this.getClass()</code>, and the underlying
|
||||||
|
* comparators are equal.
|
||||||
|
* Subclasses may want to override this behavior to remain consistent
|
||||||
|
* with the {@link Comparator#equals(Object) equals} contract.
|
||||||
|
*
|
||||||
|
* @param object the object to compare to
|
||||||
|
* @return true if equal
|
||||||
|
* @since Commons Collections 3.0
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object object) {
|
||||||
|
if (this == object) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (null == object) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (object.getClass().equals(this.getClass())) {
|
||||||
|
ReverseComparator<?> thatrc = (ReverseComparator<?>) object;
|
||||||
|
return comparator.equals(thatrc.comparator);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue