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); + } + +}