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: [email protected]
For additional commands, e-mail: [email protected]