commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From t.@apache.org
Subject svn commit: r1683914 - in /commons/proper/collections/trunk/src: main/java/org/apache/commons/collections4/ test/java/org/apache/commons/collections4/
Date Sat, 06 Jun 2015 14:29:12 GMT
Author: tn
Date: Sat Jun  6 14:29:12 2015
New Revision: 1683914

URL: http://svn.apache.org/r1683914
Log:
Move cardinality method, rename frequency to countMatches.

Modified:
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/CollectionUtils.java
    commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/IterableUtils.java
    commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/CollectionUtilsTest.java
    commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/IterableUtilsTest.java

Modified: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/CollectionUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/CollectionUtils.java?rev=1683914&r1=1683913&r2=1683914&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/CollectionUtils.java
(original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/CollectionUtils.java
Sat Jun  6 14:29:12 2015
@@ -614,29 +614,16 @@ public class CollectionUtils {
      * @param coll the {@link Iterable} to search
      * @param <O> the type of object that the {@link Iterable} may contain.
      * @return the the number of occurrences of obj in coll
+     * @throws NullPointerException if coll is null
+     * @deprecated since 4.1, use {@link IterableUtils#cardinality(Iterable, Object)} instead.
+     *   Be aware that the order of parameters has changed.
      */
+    @Deprecated
     public static <O> int cardinality(final O obj, final Iterable<? super O>
coll) {
-        if (coll instanceof Set<?>) {
-            return ((Set<? super O>) coll).contains(obj) ? 1 : 0;
-        }
-        if (coll instanceof Bag<?>) {
-            return ((Bag<? super O>) coll).getCount(obj);
-        }
-        int count = 0;
-        if (obj == null) {
-            for (final Object element : coll) {
-                if (element == null) {
-                    count++;
-                }
-            }
-        } else {
-            for (final Object element : coll) {
-                if (obj.equals(element)) {
-                    count++;
-                }
-            }
+        if (coll == null) {
+            throw new NullPointerException("coll must not be null.");
         }
-        return count;
+        return IterableUtils.cardinality(coll, obj);
     }
 
     /**
@@ -820,11 +807,11 @@ public class CollectionUtils {
      * @param input  the {@link Iterable} to get the input from, may be null
      * @param predicate  the predicate to use, may be null
      * @return the number of matches for the predicate in the collection
-     * @deprecated since 4.1, use {@link IterableUtils#frequency(Iterable, Predicate)} instead
+     * @deprecated since 4.1, use {@link IterableUtils#countMatches(Iterable, Predicate)}
instead
      */
     @Deprecated
     public static <C> int countMatches(final Iterable<C> input, final Predicate<?
super C> predicate) {
-        return predicate == null ? 0 : (int) IterableUtils.frequency(input, predicate);
+        return predicate == null ? 0 : (int) IterableUtils.countMatches(input, predicate);
     }
 
     /**

Modified: commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/IterableUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/IterableUtils.java?rev=1683914&r1=1683913&r2=1683914&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/IterableUtils.java
(original)
+++ commons/proper/collections/trunk/src/main/java/org/apache/commons/collections4/IterableUtils.java
Sat Jun  6 14:29:12 2015
@@ -22,6 +22,7 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 
 import org.apache.commons.collections4.functors.EqualPredicate;
 import org.apache.commons.collections4.iterators.LazyIteratorChain;
@@ -238,14 +239,14 @@ public class IterableUtils {
      *
      * @param <E>  the element type
      * @param iterable  the iterable to filter, may be null
-     * @param predicate  the predicate used to filter elements, must not be null
+     * @param predicate  the predicate used to filter elements, may not be null
      * @return a filtered view on the specified iterable
      * @throws NullPointerException if predicate is null
      */
     public static <E> Iterable<E> filteredIterable(final Iterable<E> iterable,
                                                    final Predicate<? super E> predicate)
{
         if (predicate == null) {
-            throw new NullPointerException("predicate must not be null.");
+            throw new NullPointerException("Predicate must not be null.");
         }
 
         return new FluentIterable<E>() {
@@ -274,7 +275,7 @@ public class IterableUtils {
      */
     public static <E> Iterable<E> boundedIterable(final Iterable<E> iterable,
final long maxSize) {
         if (maxSize < 0) {
-            throw new IllegalArgumentException("maxSize parameter must not be negative.");
+            throw new IllegalArgumentException("MaxSize parameter must not be negative.");
         }
 
         return new FluentIterable<E>() {
@@ -372,7 +373,7 @@ public class IterableUtils {
      */
     public static <E> Iterable<E> skippingIterable(final Iterable<E> iterable,
final long elementsToSkip) {
         if (elementsToSkip < 0) {
-            throw new IllegalArgumentException("elementsToSkip parameter must not be negative.");
+            throw new IllegalArgumentException("ElementsToSkip parameter must not be negative.");
         }
 
         return new FluentIterable<E>() {
@@ -403,7 +404,7 @@ public class IterableUtils {
     public static <I, O> Iterable<O> transformedIterable(final Iterable<I>
iterable,
                                                          final Transformer<? super I,
? extends O> transformer) {
         if (transformer == null) {
-            throw new NullPointerException("transformer must not be null.");
+            throw new NullPointerException("Transformer must not be null.");
         }
 
         return new FluentIterable<O>() {
@@ -540,13 +541,13 @@ public class IterableUtils {
 
     /**
      * Returns an empty iterator if the argument is <code>null</code>,
-     * or returns {@code iterable.iterator()} otherwise.
+     * or {@code iterable.iterator()} otherwise.
      *
      * @param <E> the element type
      * @param iterable  the iterable, possibly <code>null</code>
-     * @return an empty collection if the argument is <code>null</code>
+     * @return an empty iterator if the argument is <code>null</code>
      */
-    public static <E> Iterator<E> emptyIteratorIfNull(final Iterable<E>
iterable) {
+    private static <E> Iterator<E> emptyIteratorIfNull(final Iterable<E>
iterable) {
         return iterable != null ? iterable.iterator() : IteratorUtils.<E>emptyIterator();
     }
 
@@ -635,19 +636,11 @@ public class IterableUtils {
      * @return the number of matches for the predicate in the collection
      * @throws NullPointerException if predicate is null
      */
-    public static <E> long frequency(final Iterable<E> input, final Predicate<?
super E> predicate) {
+    public static <E> long countMatches(final Iterable<E> input, final Predicate<?
super E> predicate) {
         if (predicate == null) {
             throw new NullPointerException("Predicate must not be null.");
         }
-        long count = 0;
-        if (input != null) {
-            for (final E o : input) {
-                if (predicate.evaluate(o)) {
-                    count++;
-                }
-            }
-        }
-        return count;
+        return size(filteredIterable(input, predicate));
     }
 
     /**
@@ -710,6 +703,24 @@ public class IterableUtils {
     }
 
     /**
+     * Returns the number of occurrences of the provided object in the iterable.
+     *
+     * @param <E>  the type of object that the {@link Iterable} may contain
+     * @param iterable  the {@link Iterable} to search
+     * @param obj  the object to find the cardinality of
+     * @return the the number of occurrences of obj in iterable
+     */
+    public static <E, T extends E> int cardinality(final Iterable<E> iterable,
final T obj) {
+        if (iterable instanceof Set<?>) {
+            return ((Set<E>) iterable).contains(obj) ? 1 : 0;
+        }
+        if (iterable instanceof Bag<?>) {
+            return ((Bag<E>) iterable).getCount(obj);
+        }
+        return size(filteredIterable(iterable, EqualPredicate.<E>equalPredicate(obj)));
+    }
+
+    /**
      * Returns the <code>index</code>-th value in the <code>iterable</code>'s
{@link Iterator}, throwing
      * <code>IndexOutOfBoundsException</code> if there is no such element.
      * <p>

Modified: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/CollectionUtilsTest.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/CollectionUtilsTest.java?rev=1683914&r1=1683913&r2=1683914&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/CollectionUtilsTest.java
(original)
+++ commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/CollectionUtilsTest.java
Sat Jun  6 14:29:12 2015
@@ -188,6 +188,7 @@ public class CollectionUtilsTest extends
     }
 
     @Test
+    @Deprecated
     public void cardinality() {
         assertEquals(1, CollectionUtils.cardinality(1, iterableA));
         assertEquals(2, CollectionUtils.cardinality(2, iterableA));
@@ -231,6 +232,7 @@ public class CollectionUtilsTest extends
     }
 
     @Test
+    @Deprecated
     public void cardinalityOfNull() {
         final List<String> list = new ArrayList<String>();
         assertEquals(0, CollectionUtils.cardinality(null, list));
@@ -671,6 +673,7 @@ public class CollectionUtilsTest extends
     }
 
     @Test
+    @Deprecated
     public void forAllButLastDoCollection() {
         final Closure<List<? extends Number>> testClosure = ClosureUtils.invokerClosure("clear");
         final Collection<List<? extends Number>> col = new ArrayList<List<?
extends Number>>();

Modified: commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/IterableUtilsTest.java
URL: http://svn.apache.org/viewvc/commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/IterableUtilsTest.java?rev=1683914&r1=1683913&r2=1683914&view=diff
==============================================================================
--- commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/IterableUtilsTest.java
(original)
+++ commons/proper/collections/trunk/src/test/java/org/apache/commons/collections4/IterableUtilsTest.java
Sat Jun  6 14:29:12 2015
@@ -20,10 +20,13 @@ import static org.apache.commons.collect
 import static org.junit.Assert.*;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Set;
 
 import org.apache.commons.collections4.bag.HashBag;
 import org.junit.Assert;
@@ -198,6 +201,72 @@ public class IterableUtilsTest {
     }
 
     @Test
+    public void cardinality() {
+        // null iterable test
+        assertEquals(0, IterableUtils.cardinality(null, 1));
+
+        assertEquals(1, IterableUtils.cardinality(iterableA, 1));
+        assertEquals(2, IterableUtils.cardinality(iterableA, 2));
+        assertEquals(3, IterableUtils.cardinality(iterableA, 3));
+        assertEquals(4, IterableUtils.cardinality(iterableA, 4));
+        assertEquals(0, IterableUtils.cardinality(iterableA, 5));
+
+        assertEquals(0, IterableUtils.cardinality(iterableB, 1L));
+        assertEquals(4, IterableUtils.cardinality(iterableB, 2L));
+        assertEquals(3, IterableUtils.cardinality(iterableB, 3L));
+        assertEquals(2, IterableUtils.cardinality(iterableB, 4L));
+        assertEquals(1, IterableUtils.cardinality(iterableB, 5L));
+
+        // Ensure that generic bounds accept valid parameters, but return
+        // expected results
+        // e.g. no longs in the "int" Iterable<Number>, and vice versa.
+        Iterable<Number> iterableIntAsNumber = Arrays.<Number>asList(1, 2, 3,
4, 5);
+        Iterable<Number> iterableLongAsNumber = Arrays.<Number>asList(1L, 2L,
3L, 4L, 5L);
+        assertEquals(0, IterableUtils.cardinality(iterableIntAsNumber, 2L));
+        assertEquals(0, IterableUtils.cardinality(iterableLongAsNumber, 2));
+
+        final Set<String> set = new HashSet<String>();
+        set.add("A");
+        set.add("C");
+        set.add("E");
+        set.add("E");
+        assertEquals(1, IterableUtils.cardinality(set, "A"));
+        assertEquals(0, IterableUtils.cardinality(set, "B"));
+        assertEquals(1, IterableUtils.cardinality(set, "C"));
+        assertEquals(0, IterableUtils.cardinality(set, "D"));
+        assertEquals(1, IterableUtils.cardinality(set, "E"));
+
+        final Bag<String> bag = new HashBag<String>();
+        bag.add("A", 3);
+        bag.add("C");
+        bag.add("E");
+        bag.add("E");
+        assertEquals(3, IterableUtils.cardinality(bag, "A"));
+        assertEquals(0, IterableUtils.cardinality(bag, "B"));
+        assertEquals(1, IterableUtils.cardinality(bag, "C"));
+        assertEquals(0, IterableUtils.cardinality(bag, "D"));
+        assertEquals(2, IterableUtils.cardinality(bag, "E"));
+    }
+
+    @Test
+    public void cardinalityOfNull() {
+        final List<String> list = new ArrayList<String>();
+        assertEquals(0, IterableUtils.cardinality(list, null));
+        list.add("A");
+        assertEquals(0, IterableUtils.cardinality(list, null));
+        list.add(null);
+        assertEquals(1, IterableUtils.cardinality(list, null));
+        list.add("B");
+        assertEquals(1, IterableUtils.cardinality(list, null));
+        list.add(null);
+        assertEquals(2, IterableUtils.cardinality(list, null));
+        list.add("B");
+        assertEquals(2, IterableUtils.cardinality(list, null));
+        list.add(null);
+        assertEquals(3, IterableUtils.cardinality(list, null));
+    }
+
+    @Test
     public void find() {
         Predicate<Number> testPredicate = equalPredicate((Number) 4);
         Integer test = IterableUtils.find(iterableA, testPredicate);
@@ -215,19 +284,19 @@ public class IterableUtilsTest {
     }
 
     @Test
-    public void frequency() {
-        assertEquals(4, IterableUtils.frequency(iterableB, EQUALS_TWO));
-        assertEquals(0, IterableUtils.frequency(null, EQUALS_TWO));
+    public void countMatches() {
+        assertEquals(4, IterableUtils.countMatches(iterableB, EQUALS_TWO));
+        assertEquals(0, IterableUtils.countMatches(null, EQUALS_TWO));
 
         try {
-            assertEquals(0, IterableUtils.frequency(iterableA, null));
+            assertEquals(0, IterableUtils.countMatches(iterableA, null));
             fail("predicate must not be null");
         } catch (NullPointerException ex) {
             // expected
         }
 
         try {
-            assertEquals(0, IterableUtils.frequency(null, null));
+            assertEquals(0, IterableUtils.countMatches(null, null));
             fail("predicate must not be null");
         } catch (NullPointerException ex) {
             // expected



Mime
View raw message