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 2011/05/22 21:09:03 UTC
svn commit: r1126168 - in /tapestry/tapestry5/trunk/tapestry-func/src:
main/java/org/apache/tapestry5/func/F.java
test/java/org/apache/tapestry5/func/FuncTest.java
Author: hlship
Date: Sun May 22 19:09:03 2011
New Revision: 1126168
URL: http://svn.apache.org/viewvc?rev=1126168&view=rev
Log:
TAP5-1390: Add ability to create lazy flow from an initial value and a mapper to map to each successive value
Modified:
tapestry/tapestry5/trunk/tapestry-func/src/main/java/org/apache/tapestry5/func/F.java
tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/FuncTest.java
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=1126168&r1=1126167&r2=1126168&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 Sun May 22 19:09:03 2011
@@ -385,6 +385,44 @@ public class F
return new LazyFlow<T>(function);
}
+ private static <T> LazyFunction<T> toLazyFunction(final T currentValue, final Mapper<T, T> function)
+ {
+ return new LazyFunction<T>()
+ {
+ public LazyContinuation<T> next()
+ {
+ final T nextValue = function.map(currentValue);
+
+ return new LazyContinuation<T>(nextValue, toLazyFunction(nextValue, function));
+ }
+ };
+ }
+
+ /**
+ * Creates an infinite lazy flow from an initial value and a function to map from the current value to the
+ * next value.
+ *
+ * @since 5.3.0
+ * @param <T>
+ * @param initial
+ * initial value in flow
+ * @param function
+ * maps from current value in flow to next value in flow
+ * @return lazy flow
+ */
+ public static <T> Flow<T> lazy(final T initial, final Mapper<T, T> function)
+ {
+ LazyFunction<T> head = new LazyFunction<T>()
+ {
+ public LazyContinuation<T> next()
+ {
+ return new LazyContinuation<T>(initial, toLazyFunction(initial, function));
+ }
+ };
+
+ return lazy(head);
+ }
+
/**
* Creates an <em>infinite</em> series of numbers.
* <p>
Modified: tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/FuncTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/FuncTest.java?rev=1126168&r1=1126167&r2=1126168&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/FuncTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-func/src/test/java/org/apache/tapestry5/func/FuncTest.java Sun May 22 19:09:03 2011
@@ -603,4 +603,21 @@ public class FuncTest extends BaseFuncTe
assertFlowValues(flow, 9, 7, 1);
}
+
+ @Test
+ public void lazy_flow_from_mapper()
+ {
+ Mapper<Integer, Integer> mapper = new Mapper<Integer, Integer>()
+ {
+ public Integer map(Integer element)
+ {
+
+ return 2 * element.intValue();
+ }
+ };
+
+ Flow<Integer> flow = F.lazy(3, mapper);
+
+ assertFlowValues(flow.take(5), 3, 6, 12, 24, 48);
+ }
}