From d8f01757e5acdbea215d08cadb638a5a9f3ff89a Mon Sep 17 00:00:00 2001 From: rmamadgi Date: Wed, 8 Jul 2020 12:18:12 -0700 Subject: [PATCH 1/2] no comments --- .../exercise02_01/FunctionExamples.java | 37 +++++++++++-------- .../exercise02_02/FunctionExamples.java | 12 +++--- .../exercise02_03/FunctionExamples.java | 7 ++-- .../exercise02_04/FunctionExamples.java | 2 +- .../functions/exercise02_05/Function.java | 22 ++++++++++- 5 files changed, 53 insertions(+), 27 deletions(-) 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..6316bc1e 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,31 @@ public class FunctionExamples { - public static final Function triple = new Function() { + public static final Function triple = new Function() { - @Override - public Integer apply(Integer arg) { - return arg * 3; - } - }; + @Override + public Integer apply(Integer arg) { + return arg * 3; + } + }; + + public static final Function triple2 = arg -> arg * 3; + + public static final Function square = new Function() { + + @Override + public Integer apply(Integer arg) { + return arg * arg; + } + }; + + public static final Function square2 = arg -> arg * arg; - public static final Function square = new Function() { + public static final Function compose(final Function f1, + final Function f2) { - @Override - public Integer apply(Integer arg) { - return arg * arg; + return x -> f1.apply(f2.apply(x)); } - }; - public static final Function compose(final Function f1, - final Function f2) { - throw new RuntimeException("To be implemented."); - } + public static final Function compose2 = arg -> triple2.apply(square2.apply(arg)); } 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..61bc7500 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,25 @@ public interface Function { U apply(T arg); - static Function, Function, Function>> higherCompose() { - throw new RuntimeException("To be implemented."); + + + static Function, Function, Function>> higherCompose(){ + return x -> y -> z -> x.apply(y.apply(z)); } + +// 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)); +// } } From cfd85ba35395e8eaed0638f9f290ec4cc7f57a67 Mon Sep 17 00:00:00 2001 From: rmamadgi Date: Wed, 29 Jul 2020 11:56:31 -0700 Subject: [PATCH 2/2] no comments --- .../exercise02_01/BiFunctionInterface.java | 6 +++ .../exercise02_01/FunctionExamples.java | 54 +++++++++++++------ .../exercise02_01/HigherComposeOptions.java | 20 +++++++ .../functions/exercise02_01/TriFunction.java | 5 ++ .../functions/exercise02_05/Function.java | 21 +++++++- .../functions/exercise02_06/Function.java | 2 +- 6 files changed, 89 insertions(+), 19 deletions(-) create mode 100644 fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/BiFunctionInterface.java create mode 100644 fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/HigherComposeOptions.java create mode 100644 fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_01/TriFunction.java 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 6316bc1e..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,31 +2,51 @@ public class FunctionExamples { - public static final Function triple = new Function() { - - @Override - public Integer apply(Integer arg) { - return arg * 3; - } - }; + public static final Function triple() { + return + new Function() { + + @Override + public Integer apply(Integer arg) { + return arg * 3; + } + }; + } public static final Function triple2 = arg -> arg * 3; - public static final Function square = new Function() { + public static final Function square() { + return new Function() { - @Override - public Integer apply(Integer arg) { - return arg * arg; - } - }; + @Override + public Integer apply(Integer arg) { + return arg * arg; + } + }; + } public static final Function square2 = arg -> arg * arg; - public static final Function compose(final Function f1, - final Function f2) { + public static final Function compose(final Integer x, final Integer y) { + return arg -> x + y; + } + - return x -> f1.apply(f2.apply(x)); + public static final Function compose(final Function x, final Function y) { + return arg -> x.apply(y.apply(arg)); } - public static final Function compose2 = arg -> triple2.apply(square2.apply(arg)); + + //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_05/Function.java b/fpinjava-parent/fpinjava-usingfunctions-exercises/src/main/java/com/fpinjava/functions/exercise02_05/Function.java index 61bc7500..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 @@ -7,7 +7,26 @@ public interface Function { static Function, Function, Function>> higherCompose(){ - return x -> y -> z -> x.apply(y.apply(z)); + 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() { 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)); } }