Author: hlship
Date: Wed Jul  7 18:28:31 2010
New Revision: 961467

URL: http://svn.apache.org/viewvc?rev=961467&view=rev
Log:
Add Flow.toSet() to easily convert a Flow into an unmodifiable Set

Added:
    
tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/FlowToSetTests.java
   (with props)
Modified:
    
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
    
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/EmptyFlow.java
    
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/F.java
    
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/Flow.java

Modified: 
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/AbstractFlow.java?rev=961467&r1=961466&r2=961467&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/AbstractFlow.java
 Wed Jul  7 18:28:31 2010
@@ -16,11 +16,12 @@ package org.apache.tapestry5.func;
 
 import java.lang.reflect.Array;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 
 /**
  * Abstract base class for implementations of {...@link Flow}. Subclasses 
typically override some methods
@@ -236,4 +237,13 @@ abstract class AbstractFlow<T> implement
         return F.lazy(new LazyDrop<T>(length, this));
     }
 
+    public Set<T> toSet()
+    {
+        Set<T> set = new HashSet<T>();
+
+        each(F.addToCollection(set));
+
+        return Collections.unmodifiableSet(set);
+    }
+
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/EmptyFlow.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/EmptyFlow.java?rev=961467&r1=961466&r2=961467&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/EmptyFlow.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/EmptyFlow.java
 Wed Jul  7 18:28:31 2010
@@ -17,6 +17,7 @@ package org.apache.tapestry5.func;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Set;
 
 /**
  * An implementation of {...@link Flow} for empty flows. This allows for some 
easy optimizations.
@@ -120,4 +121,11 @@ class EmptyFlow<T> extends AbstractFlow<
     {
         return this;
     }
+
+    public Set<T> toSet()
+    {
+        return Collections.emptySet();
+    }
+
+    
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/F.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/F.java?rev=961467&r1=961466&r2=961467&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/F.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/F.java
 Wed Jul  7 18:28:31 2010
@@ -40,6 +40,17 @@ public class F
         return (Flow<T>) EMPTY_FLOW;
     }
 
+    public static <T> Predicate<T> eql(final T value)
+    {
+        return new Predicate<T>()
+        {
+            public boolean accept(T object)
+            {
+                return object.equals(value);
+            };
+        };
+    }
+
     public static Predicate<Number> eq(final long value)
     {
         return new Predicate<Number>()
@@ -298,4 +309,15 @@ public class F
             }
         });
     }
+
+    public static <T> Worker<T> addToCollection(final Collection<T> coll)
+    {
+        return new Worker<T>()
+        {
+            public void work(T value)
+            {
+                coll.add(value);
+            }
+        };
+    }
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/Flow.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/Flow.java?rev=961467&r1=961466&r2=961467&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/Flow.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/Flow.java
 Wed Jul  7 18:28:31 2010
@@ -16,6 +16,7 @@ package org.apache.tapestry5.func;
 
 import java.util.Comparator;
 import java.util.List;
+import java.util.Set;
 
 /**
  * A Flow is a a functional interface for working with an ordered collection 
of values.
@@ -88,6 +89,12 @@ public interface Flow<T> extends Iterabl
     List<T> toList();
 
     /**
+     * Converts the Flow into an unmodifiable set of values. This is a 
non-lazy operation that will fully realize
+     * the values of the Flow.
+     */
+    Set<T> toSet();
+
+    /**
      * Converts the Flow into an array of values (due to type erasure, you 
have to remind the Flow about the
      * type).
      */

Added: 
tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/FlowToSetTests.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/FlowToSetTests.java?rev=961467&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/FlowToSetTests.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/FlowToSetTests.java
 Wed Jul  7 18:28:31 2010
@@ -0,0 +1,38 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed 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.tapestry5.func;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Set;
+
+import org.testng.annotations.Test;
+
+public class FlowToSetTests extends BaseFuncTest
+{
+    @Test
+    public void empty_flow_to_set()
+    {
+        assertSame(F.emptyFlow().toSet(), Collections.EMPTY_SET);
+    }
+
+    @Test
+    public void nonempty_flow()
+    {
+        Set<Integer> set = F.range(1, 10).filter(evenp).toSet();
+
+        assertTrue(set.containsAll(Arrays.asList(2, 4, 6, 8)));
+    }
+}

Propchange: 
tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/FlowToSetTests.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to