Author: markt
Date: Mon Jul 15 20:51:27 2013
New Revision: 1503469

URL: http://svn.apache.org/r1503469
Log:
EL 3.0 collections operations.
Implement substream and toArray.
Refactor limit to reuse code from substream.

Modified:
    tomcat/trunk/java/org/apache/el/stream/Stream.java
    tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java

Modified: tomcat/trunk/java/org/apache/el/stream/Stream.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/stream/Stream.java?rev=1503469&r1=1503468&r2=1503469&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/stream/Stream.java (original)
+++ tomcat/trunk/java/org/apache/el/stream/Stream.java Mon Jul 15 20:51:27 2013
@@ -210,15 +210,29 @@ public class Stream {
 
 
     public Stream limit(final Number count) {
+        return substream(Integer.valueOf(0), count);
+    }
+
+
+    public Stream substream(final Number start) {
+        return substream(start, Integer.valueOf(Integer.MAX_VALUE));
+    }
+
+        public Stream substream(final Number start, final Number end) {
 
         Iterator<Object> downStream = new OpIterator() {
 
-            private final int limit = count.intValue();
+            private final int startPos = start.intValue();
+            private final int endPos = end.intValue();
             private int itemCount = 0;
 
             @Override
             protected void findNext() {
-                if (iterator.hasNext() && itemCount < limit) {
+                while (itemCount < startPos && iterator.hasNext()) {
+                    iterator.next();
+                    itemCount++;
+                }
+                if (iterator.hasNext() && itemCount < endPos) {
                     itemCount ++;
                     next = iterator.next();
                     foundNext = true;
@@ -238,6 +252,15 @@ public class Stream {
     }
 
 
+    public Object[] toArray() {
+        List<Object> result = new ArrayList<>();
+        while (iterator.hasNext()) {
+            result.add(iterator.next());
+        }
+        return result.toArray(new Object[result.size()]);
+    }
+
+
     private static class LambdaExpressionComparator
             implements Comparator<Object>{
 

Modified: tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java?rev=1503469&r1=1503468&r2=1503469&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java 
(original)
+++ tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java Mon 
Jul 15 20:51:27 2013
@@ -272,4 +272,56 @@ public class TestCollectionOperations {
 
         Assert.assertEquals(expected, result);
     }
+
+
+    @Test
+    public void testSubstreamStart01() {
+        ELProcessor processor = new ELProcessor();
+        processor.defineBean("beans", beans);
+
+        Object result = processor.getValue(
+                "beans.stream().substream(1).toList()",
+                Object.class);
+
+        List<TesterBeanA> expected = new ArrayList<>(2);
+        expected.add(bean02);
+        expected.add(bean03);
+
+        Assert.assertEquals(expected, result);
+    }
+
+
+    @Test
+    public void testSubstreamStartEnd01() {
+        ELProcessor processor = new ELProcessor();
+        processor.defineBean("beans", beans);
+
+        Object result = processor.getValue(
+                "beans.stream().substream(1,2).toList()",
+                Object.class);
+
+        List<TesterBeanA> expected = new ArrayList<>(2);
+        expected.add(bean02);
+
+        Assert.assertEquals(expected, result);
+    }
+
+
+    @Test
+    public void testToArray01() {
+        ELProcessor processor = new ELProcessor();
+        processor.defineBean("beans", beans);
+
+        Object result = processor.getValue(
+                "beans.stream().toArray()",
+                Object.class);
+
+        Object[] expected = new Object[3];
+        expected[0] = bean01;
+        expected[1] = bean02;
+        expected[2] = bean03;
+
+        Assert.assertArrayEquals(expected, (Object[]) result);
+    }
+
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to