Author: markt Date: Mon Jul 15 13:16:03 2013 New Revision: 1503230 URL: http://svn.apache.org/r1503230 Log: Support arrays as well as collections as the source for a Stream
Modified: tomcat/trunk/java/org/apache/el/stream/StreamELResolverImpl.java tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java Modified: tomcat/trunk/java/org/apache/el/stream/StreamELResolverImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/stream/StreamELResolverImpl.java?rev=1503230&r1=1503229&r2=1503230&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/el/stream/StreamELResolverImpl.java (original) +++ tomcat/trunk/java/org/apache/el/stream/StreamELResolverImpl.java Mon Jul 15 13:16:03 2013 @@ -17,6 +17,7 @@ package org.apache.el.stream; import java.beans.FeatureDescriptor; +import java.lang.reflect.Array; import java.util.Collection; import java.util.Iterator; @@ -63,7 +64,8 @@ public class StreamELResolverImpl extend if ("stream".equals(method) && params.length == 0) { if (base.getClass().isArray()) { - // TODO handle array source + context.setPropertyResolved(true); + return new Stream(new ArrayIterator(base)); } else if (base instanceof Collection) { context.setPropertyResolved(true); return new Stream(((Collection<?>) base).iterator()); @@ -73,4 +75,32 @@ public class StreamELResolverImpl extend // Not for handling by this resolver return null; } + + + private static class ArrayIterator implements Iterator<Object> { + + private final Object base; + private final int size; + private int index = 0; + + public ArrayIterator(Object base) { + this.base = base; + size = Array.getLength(base); + } + + @Override + public boolean hasNext() { + return size > index; + } + + @Override + public Object next() { + return Array.get(base, index++); + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + } } 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=1503230&r1=1503229&r2=1503230&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:16:03 2013 @@ -38,4 +38,21 @@ public class TestCollectionOperations { Assert.assertEquals(expected, result); } + + + @Test + public void testToList02() { + ELProcessor processor = new ELProcessor(); + String[] src = new String[] { "a", "b", "c" }; + processor.defineBean("src", src); + Object result = processor.getValue("src.stream().toList()", + List.class); + List<String> expected = new ArrayList<>(3); + expected.add("a"); + expected.add("b"); + expected.add("c"); + + Assert.assertEquals(expected, result); + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org