diff --git a/LambdaDemo/.classpath b/LambdaDemo/.classpath
index fb50116..3e0fb27 100644
--- a/LambdaDemo/.classpath
+++ b/LambdaDemo/.classpath
@@ -2,5 +2,6 @@
+
diff --git a/LambdaDemo/src/predicate/PredicateDemo.java b/LambdaDemo/src/predicate/PredicateDemo.java
index 7d8a699..a7eb08e 100644
--- a/LambdaDemo/src/predicate/PredicateDemo.java
+++ b/LambdaDemo/src/predicate/PredicateDemo.java
@@ -2,6 +2,8 @@
import java.util.Arrays;
import java.util.List;
+import java.util.function.BiFunction;
+import java.util.function.BinaryOperator;
import java.util.function.Predicate;
class Helper
@@ -12,6 +14,9 @@ class Helper
static Predicate isSquare = (x) -> Math.sqrt(x) * Math.sqrt(x) == x;
}
public class PredicateDemo {
+
+ public static BinaryOperator accumulator = (a,b) -> (a+b);
+ public static int INIT_SUM = 0;
public static void main(String[] args) {
List scores = Arrays.asList(40, 45, 7, 105, 36, 144, 50, 6, 8, 9);
@@ -19,6 +24,8 @@ public static void main(String[] args) {
System.out.println("Sum of odd = " + sumAll(scores, Helper.isOdd));
System.out.println("Sum of large = " + sumAll(scores, Helper.isLarge));
System.out.println("Sum of squares = " + sumAll(scores, Helper.isSquare));
+
+ System.out.println("Sum of over 30 using streams = " + sumAllUsingStreams(scores, Helper.isOver30, accumulator));
}
@@ -34,5 +41,10 @@ public static int sumAll(List values, Predicate p)
}
return sum;
}
+
+ public static int sumAllUsingStreams(List values, Predicate p, BinaryOperator adder)
+ {
+ return values.stream().filter(p).reduce(INIT_SUM, adder);
+ }
}
diff --git a/LambdaDemo/src/predicate/junit/UnitTests.java b/LambdaDemo/src/predicate/junit/UnitTests.java
new file mode 100644
index 0000000..bae9f37
--- /dev/null
+++ b/LambdaDemo/src/predicate/junit/UnitTests.java
@@ -0,0 +1,49 @@
+package predicate.junit;
+
+import static org.junit.Assert.*;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.function.Predicate;
+
+import org.junit.Test;
+
+import predicate.PredicateDemo;
+
+class Helper
+{
+ static Predicate isOver30 = (x) -> x > 30;
+ static Predicate isOdd = (x) -> x % 2 == 1;
+ static Predicate isLarge = (x) -> x > 100;
+ static Predicate isSquare = (x) -> Math.sqrt(x) * Math.sqrt(x) == x;
+}
+
+public class UnitTests
+{
+ List scores = Arrays.asList(40, 45, 7, 105, 36, 144, 50, 6, 8, 9);
+
+ @Test
+ public void over30shouldBe420()
+ {
+ assertTrue("Sum of over 30 should be 420", PredicateDemo.sumAll(scores, Helper.isOver30) == 420);
+ }
+
+ @Test
+ public void sumOfOdd()
+ {
+ assertTrue("Sum of odd should be 166", PredicateDemo.sumAll(scores, Helper.isOdd) == 166);
+ }
+
+ @Test
+ public void sumOfOddUsingStreams()
+ {
+ assertTrue("Sum of odd using streams should be 166", PredicateDemo.sumAllUsingStreams(scores, Helper.isOdd, PredicateDemo.accumulator) == 166);
+ }
+
+ @Test
+ public void sumOfSquares()
+ {
+ assertTrue("Sum of squares should be 189", PredicateDemo.sumAll(scores, Helper.isSquare) == 189);
+ }
+
+}