Author: markt Date: Mon Jul 15 14:43:48 2013 New Revision: 1503274 URL: http://svn.apache.org/r1503274 Log: EL 3.0 collections operations. Implement map
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=1503274&r1=1503273&r2=1503274&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/el/stream/Stream.java (original) +++ tomcat/trunk/java/org/apache/el/stream/Stream.java Mon Jul 15 14:43:48 2013 @@ -29,10 +29,12 @@ public class Stream { private final Iterator<?> iterator; + public Stream(Iterator<?> iterator) { this.iterator = iterator; } + public Stream filter(final LambdaExpression le) { Iterator<Object> filterIterator = new Iterator<Object>() { @@ -83,6 +85,55 @@ public class Stream { return new Stream(filterIterator); } + + public Stream map(final LambdaExpression le) { + Iterator<Object> filterIterator = new Iterator<Object>() { + + private boolean foundNext = false; + private Object next; + + @Override + public boolean hasNext() { + if (foundNext) { + return true; + } + findNext(); + return foundNext; + } + + @Override + public Object next() { + if (foundNext) { + foundNext = false; + return next; + } + findNext(); + if (foundNext) { + foundNext = false; + return next; + } else { + throw new NoSuchElementException(); + } + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + + private void findNext() { + while (iterator.hasNext()) { + Object obj = iterator.next(); + next = le.invoke(obj); + foundNext = true; + break; + } + } + }; + return new Stream(filterIterator); + } + + 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=1503274&r1=1503273&r2=1503274&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java (original) +++ tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java Mon Jul 15 14:43:48 2013 @@ -38,12 +38,15 @@ public class TestCollectionOperations { List<TesterBeanA> list = new ArrayList<>(); bean01.setValLong(1); + bean01.setName("bean01"); list.add(bean01); bean02.setValLong(2); + bean02.setName("bean02"); list.add(bean02); bean03.setValLong(3); + bean03.setName("bean03"); list.add(bean03); beans = Collections.unmodifiableList(list); @@ -92,4 +95,20 @@ public class TestCollectionOperations { Assert.assertEquals(expected, result); } + + + @Test + public void testMap01() { + ELProcessor processor = new ELProcessor(); + processor.defineBean("beans", beans); + Object result = processor.getValue( + "beans.stream().map(b->b.name).toList()", + List.class); + List<String> expected = new ArrayList<>(3); + expected.add("bean01"); + expected.add("bean02"); + expected.add("bean03"); + + Assert.assertEquals(expected, result); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org