rwaldhoff 2003/11/25 11:39:45 Modified: functor/src/java/org/apache/commons/functor Algorithms.java functor/src/test/org/apache/commons/functor/core/collection TestCollectionAlgorithms.java functor/src/test/org/apache/commons/functor/example QuicksortExample.java Removed: functor/src/java/org/apache/commons/functor/core/collection CollectionAlgorithms.java Log: move functionality of CollectionAlgorithms into Algorithms, fix clients, remove CollectionAlgorithms Revision Changes Path 1.11 +66 -3 jakarta-commons-sandbox/functor/src/java/org/apache/commons/functor/Algorithms.java Index: Algorithms.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/functor/src/java/org/apache/commons/functor/Algorithms.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- Algorithms.java 25 Nov 2003 19:21:43 -0000 1.10 +++ Algorithms.java 25 Nov 2003 19:39:44 -0000 1.11 @@ -57,7 +57,10 @@ package org.apache.commons.functor; +import java.util.ArrayList; +import java.util.Collection; import java.util.Iterator; +import java.util.ListIterator; import java.util.NoSuchElementException; import org.apache.commons.functor.core.collection.FilteredIterator; @@ -87,8 +90,68 @@ * @author Jason Horman ([EMAIL PROTECTED]) * @author Rodney Waldhoff */ -public class Algorithms { +public final class Algorithms { + /** Public constructor for bean-ish APIs */ + public Algorithms() { + } + + public static Collection collect(Iterator iter) { + return collect(iter,new ArrayList()); + } + + public static Collection collect(Iterator iter, Collection col) { + while(iter.hasNext()) { + col.add(iter.next()); + } + return col; + } + + /** + * [EMAIL PROTECTED] ListIterator#set Set} each element of the + * given [EMAIL PROTECTED] ListIterator ListIterator} to + * the result of applying the + * given [EMAIL PROTECTED] UnaryFunction UnaryFunction} to + * its original value. + */ + public static void transform(ListIterator iter, UnaryFunction func) { + while(iter.hasNext()) { + iter.set(func.evaluate(iter.next())); + } + } + + /** + * [EMAIL PROTECTED] Iterator#remove Remove} from the + * given [EMAIL PROTECTED] Iterator Iterator} all elements + * that fail to match the + * given [EMAIL PROTECTED] UnaryPredicate UnaryPredicate}. + * + * @see #remove(Iterator,UnaryPredicate) + */ + public static void retain(Iterator iter, UnaryPredicate pred) { + while(iter.hasNext()) { + if(!(pred.test(iter.next()))) { + iter.remove(); + } + } + } + + /** + * [EMAIL PROTECTED] Iterator#remove Renmove} from the + * given [EMAIL PROTECTED] Iterator Iterator} all elements + * that match the + * given [EMAIL PROTECTED] UnaryPredicate UnaryPredicate}. + * + * @see #retain(Iterator,UnaryPredicate) + */ + public static void remove(Iterator iter, UnaryPredicate pred) { + while(iter.hasNext()) { + if(pred.test(iter.next())) { + iter.remove(); + } + } + } + /** * Returns an [EMAIL PROTECTED] Iterator} that will apply the given [EMAIL PROTECTED] UnaryFunction} to each * element when accessed. 1.9 +22 -22 jakarta-commons-sandbox/functor/src/test/org/apache/commons/functor/core/collection/TestCollectionAlgorithms.java Index: TestCollectionAlgorithms.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/functor/src/test/org/apache/commons/functor/core/collection/TestCollectionAlgorithms.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- TestCollectionAlgorithms.java 24 Nov 2003 23:09:13 -0000 1.8 +++ TestCollectionAlgorithms.java 25 Nov 2003 19:39:45 -0000 1.9 @@ -68,12 +68,12 @@ import junit.framework.TestCase; import junit.framework.TestSuite; +import org.apache.commons.functor.Algorithms; import org.apache.commons.functor.BinaryFunction; import org.apache.commons.functor.UnaryFunction; import org.apache.commons.functor.UnaryPredicate; import org.apache.commons.functor.UnaryProcedure; import org.apache.commons.functor.adapter.LeftBoundPredicate; -import org.apache.commons.functor.core.IdentityFunction; import org.apache.commons.functor.core.IsEqual; /** @@ -128,11 +128,11 @@ public void testHasPublicConstructor() { // some frameworks work best with instantiable classes - assertNotNull(new CollectionAlgorithms()); + assertNotNull(new Algorithms()); } public void testCollect() { - Collection result = CollectionAlgorithms.collect(list.iterator(),IdentityFunction.instance()); + Collection result = Algorithms.collect(list.iterator()); assertNotNull(result); assertEquals(list.size(),result.size()); assertEquals(list,result); @@ -140,7 +140,7 @@ public void testCollect2() { Set set = new HashSet(); - assertSame(set,CollectionAlgorithms.collect(list.iterator(),IdentityFunction.instance(),set)); + assertSame(set,Algorithms.collect(list.iterator(),set)); assertEquals(list.size(),set.size()); for(Iterator iter = list.iterator(); iter.hasNext(); ) { assertTrue(set.contains(iter.next())); @@ -149,7 +149,7 @@ public void testCollect3() { Set set = new HashSet(); - assertSame(set,CollectionAlgorithms.collect(listWithDuplicates.iterator(),IdentityFunction.instance(),set)); + assertSame(set,Algorithms.collect(listWithDuplicates.iterator(),set)); assertTrue(listWithDuplicates.size() > set.size()); for(Iterator iter = listWithDuplicates.iterator(); iter.hasNext(); ) { assertTrue(set.contains(iter.next())); @@ -157,14 +157,14 @@ } public void testContains() { - assertTrue(CollectionAlgorithms.contains(list.iterator(),equalsThree)); - assertTrue(!CollectionAlgorithms.contains(list.iterator(),equalsTwentyThree)); + assertTrue(Algorithms.contains(list.iterator(),equalsThree)); + assertTrue(!Algorithms.contains(list.iterator(),equalsTwentyThree)); } public void testDetect() { - assertEquals(new Integer(3),CollectionAlgorithms.detect(list.iterator(),equalsThree)); + assertEquals(new Integer(3),Algorithms.detect(list.iterator(),equalsThree)); try { - CollectionAlgorithms.detect(list.iterator(),equalsTwentyThree); + Algorithms.detect(list.iterator(),equalsTwentyThree); fail("Expected NoSuchElementException"); } catch(NoSuchElementException e) { // expected @@ -172,42 +172,42 @@ } public void testDetectIfNone() { - assertEquals(new Integer(3),CollectionAlgorithms.detect(list.iterator(),equalsThree,"Xyzzy")); - assertEquals("Xyzzy",CollectionAlgorithms.detect(list.iterator(),equalsTwentyThree,"Xyzzy")); + assertEquals(new Integer(3),Algorithms.detect(list.iterator(),equalsThree,"Xyzzy")); + assertEquals("Xyzzy",Algorithms.detect(list.iterator(),equalsTwentyThree,"Xyzzy")); } public void testForEach() { Summer summer = new Summer(); - CollectionAlgorithms.foreach(list.iterator(),summer); + Algorithms.foreach(list.iterator(),summer); assertEquals(sum,summer.sum); } public void testSelect1() { - Collection result = CollectionAlgorithms.select(list.iterator(),isEven); + Collection result = Algorithms.collect(Algorithms.select(list.iterator(),isEven)); assertNotNull(result); assertEquals(evens,result); } public void testSelect2() { ArrayList result = new ArrayList(); - assertSame(result,CollectionAlgorithms.select(list.iterator(),isEven,result)); + assertSame(result,Algorithms.collect(Algorithms.select(list.iterator(),isEven),result)); assertEquals(evens,result); } public void testReject1() { - Collection result = CollectionAlgorithms.reject(list.iterator(),isOdd); + Collection result = Algorithms.collect(Algorithms.reject(list.iterator(),isOdd)); assertNotNull(result); assertEquals(evens,result); } public void testReject2() { ArrayList result = new ArrayList(); - assertSame(result,CollectionAlgorithms.reject(list.iterator(),isOdd,result)); + assertSame(result,Algorithms.collect(Algorithms.reject(list.iterator(),isOdd),result)); assertEquals(evens,result); } public void testInject() { - Object result = CollectionAlgorithms.inject( + Object result = Algorithms.inject( list.iterator(), new Integer(0), new BinaryFunction() { @@ -219,17 +219,17 @@ } public void testRetain() { - CollectionAlgorithms.retain(list.iterator(),isEven); + Algorithms.retain(list.iterator(),isEven); assertEquals(evens,list); } public void testRemove() { - CollectionAlgorithms.remove(list.iterator(),isOdd); + Algorithms.remove(list.iterator(),isOdd); assertEquals(evens,list); } public void testTransform() { - CollectionAlgorithms.transform( + Algorithms.transform( list.listIterator(), new UnaryFunction() { public Object evaluate(Object obj) { 1.7 +7 -7 jakarta-commons-sandbox/functor/src/test/org/apache/commons/functor/example/QuicksortExample.java Index: QuicksortExample.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/functor/src/test/org/apache/commons/functor/example/QuicksortExample.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- QuicksortExample.java 24 Nov 2003 23:09:13 -0000 1.6 +++ QuicksortExample.java 25 Nov 2003 19:39:45 -0000 1.7 @@ -65,11 +65,11 @@ import junit.framework.TestCase; import junit.framework.TestSuite; +import org.apache.commons.functor.Algorithms; import org.apache.commons.functor.BinaryFunction; import org.apache.commons.functor.UnaryFunction; import org.apache.commons.functor.adapter.RightBoundPredicate; import org.apache.commons.functor.core.ConstantFunction; -import org.apache.commons.functor.core.collection.CollectionAlgorithms; import org.apache.commons.functor.core.collection.IsEmpty; import org.apache.commons.functor.core.comparator.IsGreaterThanOrEqual; import org.apache.commons.functor.core.comparator.IsLessThan; @@ -501,11 +501,11 @@ */ private BinaryFunction lesserTail = new ObjectListFunction() { public Object evaluate(Object head, List tail) { - return CollectionAlgorithms.select( + return Algorithms.collect(Algorithms.select( tail.iterator(), RightBoundPredicate.bind( IsLessThan.getIsLessThan(), - head)); + head))); } }; @@ -516,11 +516,11 @@ */ private BinaryFunction greaterTail = new BinaryFunction() { public Object evaluate(Object head, Object tail) { - return CollectionAlgorithms.select( + return Algorithms.collect(Algorithms.select( ((List)tail).iterator(), RightBoundPredicate.bind( IsGreaterThanOrEqual.instance(), - head)); + head))); } };
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]