diff --git a/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/BiFunctionInterface.java b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/BiFunctionInterface.java new file mode 100644 index 00000000..7854c123 --- /dev/null +++ b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/BiFunctionInterface.java @@ -0,0 +1,6 @@ +package com.fpinjava.functions.exercise02_01; + +interface BiFunctionInterface { + V biApply(T t, U u); + +} diff --git a/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/FunctionExamples.java b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/FunctionExamples.java index 264ef262..9cdf5e67 100755 --- a/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/FunctionExamples.java +++ b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/FunctionExamples.java @@ -2,24 +2,51 @@ public class FunctionExamples { - public static final Function triple = new Function() { + public static final Function triple() { + return + new Function() { - @Override - public Integer apply(Integer arg) { - return arg * 3; + @Override + public Integer apply(Integer arg) { + return arg * 3; + } + }; } - }; - public static final Function square = new Function() { + public static final Function triple2 = arg -> arg * 3; - @Override - public Integer apply(Integer arg) { - return arg * arg; + public static final Function square() { + return new Function() { + + @Override + public Integer apply(Integer arg) { + return arg * arg; + } + }; + } + + public static final Function square2 = arg -> arg * arg; + + public static final Function compose(final Integer x, final Integer y) { + return arg -> x + y; + } + + + public static final Function compose(final Function x, final Function y) { + return arg -> x.apply(y.apply(arg)); } - }; - public static final Function compose(final Function f1, - final Function f2) { - throw new RuntimeException("To be implemented."); - } + + //public static final TriFunction, Function, Function, Integer> compose2 = f1 -> f2 -> arg -> f1.apply(f2.apply(arg)); + public static final TriFunction, Function, Integer, Integer> compose3 = (f1, f2, arg) -> f1.apply(f2.apply(arg)); + + public static final TriFunction compose4 = (f1, f2, arg) -> f1 + 0; + + + public static final Function compose2(Function f1, Function f2) { return arg -> triple2.apply(square2.apply(arg));}; + + public static final Function compose201(Function f1, Function f2) { return arg -> f1.apply(f2.apply(arg));}; + + public static final TriFunction, Function, Integer, Integer> compose301 = (f1, f2, arg) -> f1.apply(f2.apply(arg)); + } diff --git a/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/HigherComposeOptions.java b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/HigherComposeOptions.java new file mode 100644 index 00000000..0a1be579 --- /dev/null +++ b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/HigherComposeOptions.java @@ -0,0 +1,20 @@ +package com.fpinjava.functions.exercise02_01; + +public class HigherComposeOptions { + + //using params + public static Function higherCompose1(Function f1, Function f2) { + return arg -> f1.apply(f2.apply(arg)); + } + + //using params of the lambda + public final TriFunction, Function, T, V> + higherCompose3 = (f1, f2, arg) -> f1.apply(f2.apply(arg)); + + + //currying + public static Function, Function, Function>> higherCompose3() { + return f1 -> f2 -> arg -> f1.apply(f2.apply(arg)); + } + +} diff --git a/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/TriFunction.java b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/TriFunction.java new file mode 100644 index 00000000..bfa6d707 --- /dev/null +++ b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/TriFunction.java @@ -0,0 +1,5 @@ +package com.fpinjava.functions.exercise02_01; + +interface TriFunction{ + R triApply(T t, U u, V v); +} diff --git a/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_02/FunctionExamples.java b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_02/FunctionExamples.java index 7e3a1558..2709aeae 100755 --- a/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_02/FunctionExamples.java +++ b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_02/FunctionExamples.java @@ -2,12 +2,12 @@ public class FunctionExamples { - public static final Function triple = x -> x * 3; + public static final Function triple = x -> x * 3; - public static final Function square = x -> x * x; + public static final Function square = x -> x * x; - public static final Function compose(final Function f1, - final Function f2) { - throw new RuntimeException("To be implemented."); - } + public static final Function compose(final Function f1, + final Function f2) { + return x -> f1.apply(f2.apply(x)); + } } diff --git a/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_03/FunctionExamples.java b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_03/FunctionExamples.java index cb10ae37..6ac6f9c5 100755 --- a/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_03/FunctionExamples.java +++ b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_03/FunctionExamples.java @@ -3,9 +3,10 @@ public class FunctionExamples { - public static final Function> add = null; // To be implemented + //why does x is highlighted by intelliJ as purple with under score? + public static final Function> add = x -> y -> x + y; - public static final BinaryOperator add2 = null; // To be implemented + public static final BinaryOperator add2 = x -> y -> x + y; - public static final BinaryOperator mult = null; // To be implemented + public static final BinaryOperator mult = x -> y -> x * y; } diff --git a/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_04/FunctionExamples.java b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_04/FunctionExamples.java index 4577f085..e0065661 100755 --- a/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_04/FunctionExamples.java +++ b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_04/FunctionExamples.java @@ -7,7 +7,7 @@ public class FunctionExamples { public static final Function square = x -> x * x; public static final Function, Function, - Function>> compose = null; // To be implemented + Function>> compose = x -> y -> z -> x.apply(y.apply(z)); public static final Function f = compose.apply(square).apply(triple); } diff --git a/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_05/Function.java b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_05/Function.java index df2771e5..94cb68d5 100755 --- a/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_05/Function.java +++ b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_05/Function.java @@ -4,7 +4,44 @@ public interface Function { U apply(T arg); - static Function, Function, Function>> higherCompose() { - throw new RuntimeException("To be implemented."); + + + static Function, Function, Function>> higherCompose(){ + return f1 -> f2 -> arg -> f1.apply(f2.apply(arg)); + } + + + static Function, Function, Function>> higherCompose4(){ + return f1 -> f2 -> arg -> f1.apply(f2.apply(arg)); + } + + //F0 - Boolean T + //F1 - Integer U + //F2 - Boolean V + //Arg - Character W + + static Function, Function> higherCompose2(){ + return f1 -> arg -> f1.apply(arg); } + + static Function higherCompose3(){ + final Function tIntegerFunction = arg -> 0; + return tIntegerFunction; + } + +// static Function<> higherCompose2() { +// return x -> y -> z -> x.apply(y.apply(z)); +// } +// +// static Function> higherCompose2() { +// return x -> y -> z -> x.apply(y.apply(z)); +// } +// +// static Function, Function<>> higherCompose2() { +// return x -> y -> z -> x.apply(y.apply(z)); +// } +// +// static Function, Function, Function<>>> higherCompose2() { +// return x -> y -> z -> x.apply(y.apply(z)); +// } } diff --git a/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_06/Function.java b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_06/Function.java index 5ccfc024..ae8e6260 100755 --- a/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_06/Function.java +++ b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_06/Function.java @@ -10,6 +10,6 @@ static Function, Function, Function Function, Function, Function>> higherAndThen() { - throw new RuntimeException("To be implemented."); + return f -> g -> x -> g.apply(f.apply(x)); } }