Author: markt Date: Tue Jul 16 13:45:47 2013 New Revision: 1503715 URL: http://svn.apache.org/r1503715 Log: EL 3.0 collections operations. Implement average, sum and count.
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=1503715&r1=1503714&r2=1503715&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/el/stream/Stream.java (original) +++ tomcat/trunk/java/org/apache/el/stream/Stream.java Tue Jul 16 13:45:47 2013 @@ -28,6 +28,7 @@ import java.util.Set; import javax.el.ELException; import javax.el.LambdaExpression; +import org.apache.el.lang.ELArithmetic; import org.apache.el.lang.ELSupport; public class Stream { @@ -308,6 +309,46 @@ public class Stream { } + public Optional average() { + long count = 0; + Number sum = Long.valueOf(0); + + while (iterator.hasNext()) { + count++; + sum = ELArithmetic.add(sum, iterator.next()); + } + + if (count == 0) { + return Optional.EMPTY; + } else { + return new Optional(ELArithmetic.divide(sum, Long.valueOf(count))); + } + } + + + public Number sum() { + Number sum = Long.valueOf(0); + + while (iterator.hasNext()) { + sum = ELArithmetic.add(sum, iterator.next()); + } + + return sum; + } + + + public Long count() { + long count = 0; + + while (iterator.hasNext()) { + iterator.next(); + count ++; + } + + return Long.valueOf(count); + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) private Optional compare(boolean isMax) { Comparable result = null; 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=1503715&r1=1503714&r2=1503715&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java (original) +++ tomcat/trunk/test/org/apache/el/stream/TestCollectionOperations.java Tue Jul 16 13:45:47 2013 @@ -27,6 +27,7 @@ import org.junit.Assert; import org.junit.Test; import org.apache.el.TesterBeanA; +import org.apache.el.lang.ELSupport; public class TestCollectionOperations { @@ -480,4 +481,96 @@ public class TestCollectionOperations { Assert.assertEquals(bean01, ((Optional) result).get()); } + + + @Test + public void testAverage01() { + ELProcessor processor = new ELProcessor(); + + Object result = processor.getValue( + "[1,2,3,4,5].stream().average()", + Object.class); + + Number average = (Number) ((Optional) result).get(); + Assert.assertTrue("Result: " + average.toString(), + ELSupport.equals(Long.valueOf(3), average)); + } + + + @Test + public void testAverage02() { + ELProcessor processor = new ELProcessor(); + + Object result = processor.getValue( + "[1,2,3,4,5,6].stream().average()", + Object.class); + + Number average = (Number) ((Optional) result).get(); + Assert.assertTrue("Result: " + average.toString(), + ELSupport.equals(Double.valueOf(3.5), average)); + } + + + @Test(expected=ELException.class) + public void testAverage03() { + ELProcessor processor = new ELProcessor(); + + Object result = processor.getValue( + "[].stream().average()", + Object.class); + + ((Optional) result).get(); + } + + + @Test + public void testSum01() { + ELProcessor processor = new ELProcessor(); + + Object result = processor.getValue( + "[1,2,3,4,5].stream().sum()", + Object.class); + + Assert.assertTrue("Result: " + result.toString(), + ELSupport.equals(Long.valueOf(15), result)); + } + + + @Test + public void testSum02() { + ELProcessor processor = new ELProcessor(); + + Object result = processor.getValue( + "[].stream().sum()", + Object.class); + + Assert.assertTrue("Result: " + result.toString(), + ELSupport.equals(Long.valueOf(0), result)); + } + + + @Test + public void testCount01() { + ELProcessor processor = new ELProcessor(); + + Object result = processor.getValue( + "[1,2,3,4,5].stream().count()", + Object.class); + + Assert.assertTrue("Result: " + result.toString(), + ELSupport.equals(Long.valueOf(5), result)); + } + + + @Test + public void testCount02() { + ELProcessor processor = new ELProcessor(); + + Object result = processor.getValue( + "[].stream().count()", + Object.class); + + Assert.assertTrue("Result: " + result.toString(), + ELSupport.equals(Long.valueOf(0), result)); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org