You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2010/07/07 20:28:32 UTC

svn commit: r961467 - in /tapestry/tapestry5/trunk/tapestry-func/src: main/java/org/apache/tapestry5/func/ test/java/org/apache/tapestry5/func/

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