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