Author: markt
Date: Mon Jul 15 20:51:27 2013
New Revision: 1503469
URL: http://svn.apache.org/r1503469
Log:
EL 3.0 collections operations.
Implement substream and toArray.
Refactor limit to reuse code from substream.
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=1503469&r1=1503468&r2=1503469&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/stream/Stream.java (original)
+++ tomcat/trunk/java/org/apache/el/stream/Stream.java Mon Jul 15 20:51:27 2013
@@ -210,15 +210,29 @@ public class Stream {
public Stream limit(final Number count) {
+ return substream(Integer.valueOf(0), count);
+ }
+
+
+ public Stream substream(final Number start) {
+ return substream(start, Integer.valueOf(Integer.MAX_VALUE));
+ }
+
+ public Stream substream(final Number start, final Number end) {
Iterator<Object> downStream = new OpIterator() {
- private final int limit = count.intValue();
+ private final int startPos = start.intValue();
+ private final int endPos = end.intValue();
private int itemCount = 0;
@Override
protected void findNext() {
- if (iterator.hasNext() && itemCount < limit) {
+ while (itemCount < startPos && iterator.hasNext()) {
+ iterator.next();
+ itemCount++;
+ }
+ if (iterator.hasNext() && itemCount < endPos) {
itemCount ++;
next = iterator.next();
foundNext = true;
@@ -238,6 +252,15 @@ public class Stream {
}
+ public Object[] toArray() {
+ List<Object> result = new ArrayList<>();
+ while (iterator.hasNext()) {
+ result.add(iterator.next());
+ }
+ return result.toArray(new Object[result.size()]);
+ }
+
+
private static class LambdaExpressionComparator
implements Comparator<Object>{
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=1503469&r1=1503468&r2=1503469&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java
(original)
+++ tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java Mon
Jul 15 20:51:27 2013
@@ -272,4 +272,56 @@ public class TestCollectionOperations {
Assert.assertEquals(expected, result);
}
+
+
+ @Test
+ public void testSubstreamStart01() {
+ ELProcessor processor = new ELProcessor();
+ processor.defineBean("beans", beans);
+
+ Object result = processor.getValue(
+ "beans.stream().substream(1).toList()",
+ Object.class);
+
+ List<TesterBeanA> expected = new ArrayList<>(2);
+ expected.add(bean02);
+ expected.add(bean03);
+
+ Assert.assertEquals(expected, result);
+ }
+
+
+ @Test
+ public void testSubstreamStartEnd01() {
+ ELProcessor processor = new ELProcessor();
+ processor.defineBean("beans", beans);
+
+ Object result = processor.getValue(
+ "beans.stream().substream(1,2).toList()",
+ Object.class);
+
+ List<TesterBeanA> expected = new ArrayList<>(2);
+ expected.add(bean02);
+
+ Assert.assertEquals(expected, result);
+ }
+
+
+ @Test
+ public void testToArray01() {
+ ELProcessor processor = new ELProcessor();
+ processor.defineBean("beans", beans);
+
+ Object result = processor.getValue(
+ "beans.stream().toArray()",
+ Object.class);
+
+ Object[] expected = new Object[3];
+ expected[0] = bean01;
+ expected[1] = bean02;
+ expected[2] = bean03;
+
+ Assert.assertArrayEquals(expected, (Object[]) result);
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]