Author: markt Date: Mon Jul 15 15:43:11 2013 New Revision: 1503305 URL: http://svn.apache.org/r1503305 Log: EL 3.0 collections operations. Implement flatMap and iterator
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=1503305&r1=1503304&r2=1503305&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/el/stream/Stream.java (original) +++ tomcat/trunk/java/org/apache/el/stream/Stream.java Mon Jul 15 15:43:11 2013 @@ -69,6 +69,36 @@ public class Stream { } + public Stream flatMap(final LambdaExpression le) { + Iterator<Object> downStream = new OpIterator() { + + private Iterator<?> inner; + + @Override + protected void findNext() { + while (iterator.hasNext() || + (inner != null && inner.hasNext())) { + if (inner == null || !inner.hasNext()) { + inner = ((Stream) le.invoke(iterator.next())).iterator; + } + + if (inner.hasNext()) { + next = inner.next(); + foundNext = true; + break; + } + } + } + }; + return new Stream(downStream); + } + + + public Iterator<?> iterator() { + return iterator; + } + + public List<Object> toList() { List<Object> result = new ArrayList<>(); while (iterator.hasNext()) { 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=1503305&r1=1503304&r2=1503305&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java (original) +++ tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java Mon Jul 15 15:43:11 2013 @@ -132,4 +132,36 @@ public class TestCollectionOperations { Assert.assertEquals("bean03", list.get(1).get(0)); Assert.assertEquals(Long.valueOf(3), list.get(1).get(1)); } + + + @Test + public void testFlatMap01() { + ELProcessor processor = new ELProcessor(); + processor.defineBean("beans", beans); + Object result = processor.getValue( + "beans.stream().flatMap(b->b.name.toCharArray().stream()).toList()", + List.class); + + List<Character> expected = new ArrayList<>(18); + expected.add(Character.valueOf('b')); + expected.add(Character.valueOf('e')); + expected.add(Character.valueOf('a')); + expected.add(Character.valueOf('n')); + expected.add(Character.valueOf('0')); + expected.add(Character.valueOf('1')); + expected.add(Character.valueOf('b')); + expected.add(Character.valueOf('e')); + expected.add(Character.valueOf('a')); + expected.add(Character.valueOf('n')); + expected.add(Character.valueOf('0')); + expected.add(Character.valueOf('2')); + expected.add(Character.valueOf('b')); + expected.add(Character.valueOf('e')); + expected.add(Character.valueOf('a')); + expected.add(Character.valueOf('n')); + expected.add(Character.valueOf('0')); + expected.add(Character.valueOf('3')); + + Assert.assertEquals(expected, result); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org