You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by tn...@apache.org on 2013/03/06 20:51:27 UTC

svn commit: r1453516 - in /commons/proper/collections/trunk/src: changes/ main/java/org/apache/commons/collections/ main/java/org/apache/commons/collections/comparators/ test/java/org/apache/commons/collections/comparators/

Author: tn
Date: Wed Mar  6 19:51:26 2013
New Revision: 1453516

URL: http://svn.apache.org/r1453516
Log:
[COLLECTIONS-372] Allow different input/output types for TransformingComparator.

Modified:
    commons/proper/collections/trunk/src/changes/changes.xml
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections/ComparatorUtils.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections/comparators/TransformingComparator.java
    commons/proper/collections/trunk/src/test/java/org/apache/commons/collections/comparators/TransformingComparatorTest.java

Modified: commons/proper/collections/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/changes/changes.xml?rev=1453516&r1=1453515&r2=1453516&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/changes/changes.xml (original)
+++ commons/proper/collections/trunk/src/changes/changes.xml Wed Mar  6 19:51:26 2013
@@ -22,6 +22,9 @@
   <body>
 
   <release version="4.0" date="TBA" description="Next release">
+    <action issue="COLLECTIONS-372" dev="tn" type="change">
+      TransformingComparator now supports different types for its input/output values.
+    </action>
     <action issue="COLLECTIONS-446" dev="tn" type="add" due-to="Matt Lachman">
       Added method "CollectionUtils#isEqualCollection(Collection, Collection, Equator)".
     </action>

Modified: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections/ComparatorUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections/ComparatorUtils.java?rev=1453516&r1=1453515&r2=1453516&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections/ComparatorUtils.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections/ComparatorUtils.java Wed Mar  6 19:51:26 2013
@@ -202,20 +202,21 @@ public class ComparatorUtils {
      * by the given transformer before they are compared by the given
      * comparator.
      *
-     * @param <E>  the object type to compare
+     * @param <I>  the input object type of the transformed comparator
+     * @param <O>  the object type of the decorated comparator
      * @param comparator  the sort order to use
      * @param transformer  the transformer to use
      * @return  a comparator that transforms its input objects before comparing them
      * @see  TransformingComparator
      */
     @SuppressWarnings("unchecked")
-    public static <E> Comparator<E> transformedComparator(Comparator<E> comparator,
-            final Transformer<? super E, ? extends E> transformer) {
+    public static <I, O> Comparator<I> transformedComparator(Comparator<O> comparator,
+            final Transformer<? super I, ? extends O> transformer) {
 
         if (comparator == null) {
             comparator = NATURAL_COMPARATOR;
         }
-        return new TransformingComparator<E>(transformer, comparator);
+        return new TransformingComparator<I, O>(transformer, comparator);
     }
 
     /**

Modified: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections/comparators/TransformingComparator.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections/comparators/TransformingComparator.java?rev=1453516&r1=1453515&r2=1453516&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections/comparators/TransformingComparator.java (original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections/comparators/TransformingComparator.java Wed Mar  6 19:51:26 2013
@@ -35,15 +35,15 @@ import org.apache.commons.collections.Tr
  * @see org.apache.commons.collections.Transformer
  * @see org.apache.commons.collections.comparators.ComparableComparator
  */
-public class TransformingComparator<E> implements Comparator<E>, Serializable {
+public class TransformingComparator<I, O> implements Comparator<I>, Serializable {
     
     /** Serialization version from Collections 4.0. */
     private static final long serialVersionUID = 3456940356043606220L;
 
     /** The decorated comparator. */
-    protected final Comparator<E> decorated;
+    protected final Comparator<O> decorated;
     /** The transformer being used. */    
-    protected final Transformer<? super E, ? extends E> transformer;
+    protected final Transformer<? super I, ? extends O> transformer;
 
     //-----------------------------------------------------------------------
     /**
@@ -53,7 +53,7 @@ public class TransformingComparator<E> i
      * @param transformer what will transform the arguments to <code>compare</code>
      */
     @SuppressWarnings("unchecked")
-    public TransformingComparator(final Transformer<? super E, ? extends E> transformer) {
+    public TransformingComparator(final Transformer<? super I, ? extends O> transformer) {
         this(transformer, ComparatorUtils.NATURAL_COMPARATOR);
     }
 
@@ -63,8 +63,8 @@ public class TransformingComparator<E> i
      * @param transformer  what will transform the arguments to <code>compare</code>
      * @param decorated  the decorated Comparator
      */
-    public TransformingComparator(final Transformer<? super E, ? extends E> transformer,
-                                  final Comparator<E> decorated) {
+    public TransformingComparator(final Transformer<? super I, ? extends O> transformer,
+                                  final Comparator<O> decorated) {
         this.decorated = decorated;
         this.transformer = transformer;
     }
@@ -77,9 +77,9 @@ public class TransformingComparator<E> i
      * @param obj2  the second object to transform then compare
      * @return negative if obj1 is less, positive if greater, zero if equal
      */
-    public int compare(final E obj1, final E obj2) {
-        final E value1 = this.transformer.transform(obj1);
-        final E value2 = this.transformer.transform(obj2);
+    public int compare(final I obj1, final I obj2) {
+        final O value1 = this.transformer.transform(obj1);
+        final O value2 = this.transformer.transform(obj2);
         return this.decorated.compare(value1, value2);
     }
 
@@ -119,7 +119,7 @@ public class TransformingComparator<E> i
             return false;
         }
         if (object.getClass().equals(this.getClass())) {
-            final TransformingComparator<?> comp = (TransformingComparator<?>) object;
+            final TransformingComparator<?, ?> comp = (TransformingComparator<?, ?>) object;
             return null == decorated ? null == comp.decorated : decorated.equals(comp.decorated) &&
                     null == transformer ? null == comp.transformer : transformer.equals(comp.transformer);
         }

Modified: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections/comparators/TransformingComparatorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/java/org/apache/commons/collections/comparators/TransformingComparatorTest.java?rev=1453516&r1=1453515&r2=1453516&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/test/java/org/apache/commons/collections/comparators/TransformingComparatorTest.java (original)
+++ commons/proper/collections/trunk/src/test/java/org/apache/commons/collections/comparators/TransformingComparatorTest.java Wed Mar  6 19:51:26 2013
@@ -20,6 +20,7 @@ import java.util.Comparator;
 import java.util.LinkedList;
 import java.util.List;
 
+import org.apache.commons.collections.ComparatorUtils;
 import org.apache.commons.collections.TransformerUtils;
 
 /**
@@ -43,10 +44,8 @@ public class TransformingComparatorTest 
 
     @Override
     public Comparator<Integer> makeObject() {
-       final Comparator<Integer> decorated = new ComparableComparator<Integer>();
-       final TransformingComparator<Integer> comparator =
-               new TransformingComparator<Integer>(TransformerUtils.<Integer>nopTransformer(), decorated);
-       return comparator;
+       final Comparator<String> decorated = new ComparableComparator<String>();
+       return ComparatorUtils.transformedComparator(decorated, TransformerUtils.<Integer>stringValueTransformer());
     }
 
     @Override