Author: markt Date: Mon Jul 15 13:59:51 2013 New Revision: 1503253 URL: http://svn.apache.org/r1503253 Log: EL 3.0 collections operations. Implement filter
Modified: tomcat/trunk/java/org/apache/el/parser/AstLambdaExpression.java 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/parser/AstLambdaExpression.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/parser/AstLambdaExpression.java?rev=1503253&r1=1503252&r2=1503253&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/el/parser/AstLambdaExpression.java (original) +++ tomcat/trunk/java/org/apache/el/parser/AstLambdaExpression.java Mon Jul 15 13:59:51 2013 @@ -55,6 +55,7 @@ public class AstLambdaExpression extends ValueExpressionImpl ve = new ValueExpressionImpl("", children[1], ctx.getFunctionMapper(), ctx.getVariableMapper(), null); LambdaExpression le = new LambdaExpression(formalParameters, ve); + le.setELContext(ctx); return le; } 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=1503253&r1=1503252&r2=1503253&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/el/stream/Stream.java (original) +++ tomcat/trunk/java/org/apache/el/stream/Stream.java Mon Jul 15 13:59:51 2013 @@ -19,6 +19,11 @@ package org.apache.el.stream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.NoSuchElementException; + +import javax.el.LambdaExpression; + +import org.apache.el.lang.ELSupport; public class Stream { @@ -28,6 +33,55 @@ public class Stream { this.iterator = iterator; } + public Stream filter(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(); + if (ELSupport.coerceToBoolean( + le.invoke(obj)).booleanValue()) { + next = obj; + foundNext = true; + break; + } + } + } + }; + return new Stream(filterIterator); + } public List<Object> toList() { List<Object> result = new ArrayList<>(); 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=1503253&r1=1503252&r2=1503253&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java (original) +++ tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java Mon Jul 15 13:59:51 2013 @@ -17,6 +17,7 @@ package org.apache.el.stream; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import javax.el.ELProcessor; @@ -24,8 +25,31 @@ import javax.el.ELProcessor; import org.junit.Assert; import org.junit.Test; +import org.apache.el.TesterBeanA; + public class TestCollectionOperations { + private static final TesterBeanA bean01 = new TesterBeanA(); + private static final TesterBeanA bean02 = new TesterBeanA(); + private static final TesterBeanA bean03 = new TesterBeanA(); + private static final List<TesterBeanA> beans; + + static { + List<TesterBeanA> list = new ArrayList<>(); + + bean01.setValLong(1); + list.add(bean01); + + bean02.setValLong(2); + list.add(bean02); + + bean03.setValLong(3); + list.add(bean03); + + beans = Collections.unmodifiableList(list); + } + + @Test public void testToList01() { ELProcessor processor = new ELProcessor(); @@ -55,4 +79,17 @@ public class TestCollectionOperations { Assert.assertEquals(expected, result); } + + @Test + public void testFilter01() { + ELProcessor processor = new ELProcessor(); + processor.defineBean("beans", beans); + Object result = processor.getValue( + "beans.stream().filter(b->b.valLong > 2).toList()", + List.class); + List<TesterBeanA> expected = new ArrayList<>(1); + 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