From 176d225637ce6bb9a96fd69b83b382b998abd3b8 Mon Sep 17 00:00:00 2001 From: woomin Date: Thu, 25 Jun 2020 22:52:43 +0900 Subject: [PATCH 1/9] Convert anonymous Class to lambda --- src/test/java/nextstep/fp/CarTest.java | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/src/test/java/nextstep/fp/CarTest.java b/src/test/java/nextstep/fp/CarTest.java index 1ab1106..ecab481 100644 --- a/src/test/java/nextstep/fp/CarTest.java +++ b/src/test/java/nextstep/fp/CarTest.java @@ -8,24 +8,14 @@ public class CarTest { @Test public void 이동() { Car car = new Car("pobi", 0); - Car actual = car.move(new MoveStrategy() { - @Override - public boolean isMovable() { - return true; - } - }); + Car actual = car.move(() -> true); assertThat(actual).isEqualTo(new Car("pobi", 1)); } @Test public void 정지() { Car car = new Car("pobi", 0); - Car actual = car.move(new MoveStrategy() { - @Override - public boolean isMovable() { - return false; - } - }); + Car actual = car.move(() -> false); assertThat(actual).isEqualTo(new Car("pobi", 0)); } } From e1ac53e91bc0e731d237b836840fe1c9bca0e41e Mon Sep 17 00:00:00 2001 From: woomin Date: Mon, 29 Jun 2020 14:06:46 +0900 Subject: [PATCH 2/9] Remove sum methods duplication by using interface --- src/main/java/nextstep/fp/Conditional.java | 5 +++++ src/main/java/nextstep/fp/Lambda.java | 26 +++++++++------------- src/test/java/nextstep/fp/LambdaTest.java | 21 ++++++++++++++--- 3 files changed, 33 insertions(+), 19 deletions(-) create mode 100644 src/main/java/nextstep/fp/Conditional.java diff --git a/src/main/java/nextstep/fp/Conditional.java b/src/main/java/nextstep/fp/Conditional.java new file mode 100644 index 0000000..a61044f --- /dev/null +++ b/src/main/java/nextstep/fp/Conditional.java @@ -0,0 +1,5 @@ +package nextstep.fp; + +public interface Conditional { + boolean isMatchedWithCondition(Integer number); +} diff --git a/src/main/java/nextstep/fp/Lambda.java b/src/main/java/nextstep/fp/Lambda.java index bd68fe1..fb9cf71 100644 --- a/src/main/java/nextstep/fp/Lambda.java +++ b/src/main/java/nextstep/fp/Lambda.java @@ -26,28 +26,22 @@ public void run() { }).start(); } - public static int sumAll(List numbers) { - int total = 0; - for (int number : numbers) { - total += number; - } - return total; + public static int sumAll(List numbers, Conditional c) { + return sum(numbers, c); } - public static int sumAllEven(List numbers) { - int total = 0; - for (int number : numbers) { - if (number % 2 == 0) { - total += number; - } - } - return total; + public static int sumAllEven(List numbers, Conditional c) { + return sum(numbers, c); + } + + public static int sumAllOverThree(List numbers, Conditional c) { + return sum(numbers, c); } - public static int sumAllOverThree(List numbers) { + private static int sum(List numbers, Conditional c) { int total = 0; for (int number : numbers) { - if (number > 3) { + if (c.isMatchedWithCondition(number)) { total += number; } } diff --git a/src/test/java/nextstep/fp/LambdaTest.java b/src/test/java/nextstep/fp/LambdaTest.java index f240ac6..1a6a809 100644 --- a/src/test/java/nextstep/fp/LambdaTest.java +++ b/src/test/java/nextstep/fp/LambdaTest.java @@ -33,19 +33,34 @@ public void runThread() throws Exception { @Test public void sumAll() throws Exception { - int sum = Lambda.sumAll(numbers); + int sum = Lambda.sumAll(numbers, new Conditional() { + @Override + public boolean isMatchedWithCondition(Integer number) { + return true; + } + }); assertThat(sum).isEqualTo(21); } @Test public void sumAllEven() throws Exception { - int sum = Lambda.sumAllEven(numbers); + int sum = Lambda.sumAllEven(numbers, new Conditional() { + @Override + public boolean isMatchedWithCondition(Integer number) { + return number % 2 == 0; + } + }); assertThat(sum).isEqualTo(12); } @Test public void sumAllOverThree() throws Exception { - int sum = Lambda.sumAllOverThree(numbers); + int sum = Lambda.sumAllOverThree(numbers, new Conditional() { + @Override + public boolean isMatchedWithCondition(Integer number) { + return number > 3; + } + }); assertThat(sum).isEqualTo(15); } } From ace5dc0511f94d7fdb714e9bf2f00fa76ff02ec7 Mon Sep 17 00:00:00 2001 From: woomin Date: Mon, 29 Jun 2020 14:09:19 +0900 Subject: [PATCH 3/9] Modify anonymous Class to lambda expresstion --- src/test/java/nextstep/fp/LambdaTest.java | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/src/test/java/nextstep/fp/LambdaTest.java b/src/test/java/nextstep/fp/LambdaTest.java index 1a6a809..7249de2 100644 --- a/src/test/java/nextstep/fp/LambdaTest.java +++ b/src/test/java/nextstep/fp/LambdaTest.java @@ -33,34 +33,19 @@ public void runThread() throws Exception { @Test public void sumAll() throws Exception { - int sum = Lambda.sumAll(numbers, new Conditional() { - @Override - public boolean isMatchedWithCondition(Integer number) { - return true; - } - }); + int sum = Lambda.sumAll(numbers, (number) -> true); assertThat(sum).isEqualTo(21); } @Test public void sumAllEven() throws Exception { - int sum = Lambda.sumAllEven(numbers, new Conditional() { - @Override - public boolean isMatchedWithCondition(Integer number) { - return number % 2 == 0; - } - }); + int sum = Lambda.sumAllEven(numbers, (number) -> number % 2 == 0); assertThat(sum).isEqualTo(12); } @Test public void sumAllOverThree() throws Exception { - int sum = Lambda.sumAllOverThree(numbers, new Conditional() { - @Override - public boolean isMatchedWithCondition(Integer number) { - return number > 3; - } - }); + int sum = Lambda.sumAllOverThree(numbers, (number) -> number > 3); assertThat(sum).isEqualTo(15); } } From 256bbba01c6911dbaed84407fcdd86bc9ebb8eb8 Mon Sep 17 00:00:00 2001 From: woomin Date: Mon, 29 Jun 2020 14:14:20 +0900 Subject: [PATCH 4/9] Modify countWords() by using lambda expression --- src/main/java/nextstep/fp/StreamStudy.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/nextstep/fp/StreamStudy.java b/src/main/java/nextstep/fp/StreamStudy.java index b446983..d19450c 100644 --- a/src/main/java/nextstep/fp/StreamStudy.java +++ b/src/main/java/nextstep/fp/StreamStudy.java @@ -15,11 +15,7 @@ public static long countWords() throws IOException { .get("src/main/resources/fp/war-and-peace.txt")), StandardCharsets.UTF_8); List words = Arrays.asList(contents.split("[\\P{L}]+")); - long count = 0; - for (String w : words) { - if (w.length() > 12) count++; - } - return count; + return words.stream().filter(v -> v.length() > 12).count(); } public static void printLongestWordTop100() throws IOException { From dbd38c42191f7fdcbe677b96f6fa4c691092376a Mon Sep 17 00:00:00 2001 From: woomin Date: Mon, 29 Jun 2020 14:48:40 +0900 Subject: [PATCH 5/9] Fill code in sumOverThreeAndDouble method --- src/main/java/nextstep/fp/StreamStudy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/nextstep/fp/StreamStudy.java b/src/main/java/nextstep/fp/StreamStudy.java index d19450c..d2f1af7 100644 --- a/src/main/java/nextstep/fp/StreamStudy.java +++ b/src/main/java/nextstep/fp/StreamStudy.java @@ -35,6 +35,6 @@ public static long sumAll(List numbers) { } public static long sumOverThreeAndDouble(List numbers) { - return 0; + return numbers.stream().filter(v -> v > 3).map(v -> v * 2).reduce(Integer::sum).orElse(0); } } \ No newline at end of file From d717f07c1322a5ce3b4a13af2e0b549bf71ccefa Mon Sep 17 00:00:00 2001 From: woomin Date: Mon, 29 Jun 2020 14:57:07 +0900 Subject: [PATCH 6/9] Fill code in printLongestWordTop100 method --- src/main/java/nextstep/fp/StreamStudy.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/nextstep/fp/StreamStudy.java b/src/main/java/nextstep/fp/StreamStudy.java index d2f1af7..34932a9 100644 --- a/src/main/java/nextstep/fp/StreamStudy.java +++ b/src/main/java/nextstep/fp/StreamStudy.java @@ -23,7 +23,13 @@ public static void printLongestWordTop100() throws IOException { .get("src/main/resources/fp/war-and-peace.txt")), StandardCharsets.UTF_8); List words = Arrays.asList(contents.split("[\\P{L}]+")); - // TODO 이 부분에 구현한다. + words.stream() + .filter(v -> v.length() > 12) + .sorted((a, b) -> b.length() - a.length()) + .distinct() + .collect(Collectors.toList()) + .subList(0, 100) + .forEach(v -> System.out.println(v.toLowerCase())); } public static List doubleNumbers(List numbers) { From f36ceba8854c8e8b6dceb7f9ae7be5980eb1f7e4 Mon Sep 17 00:00:00 2001 From: woomin Date: Tue, 30 Jun 2020 13:33:25 +0900 Subject: [PATCH 7/9] Make ageIsInRange2() method by using Optional --- src/main/java/nextstep/optional/User.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/nextstep/optional/User.java b/src/main/java/nextstep/optional/User.java index 9614c2f..d454a47 100644 --- a/src/main/java/nextstep/optional/User.java +++ b/src/main/java/nextstep/optional/User.java @@ -1,5 +1,7 @@ package nextstep.optional; +import java.util.Optional; + public class User { private String name; private Integer age; @@ -33,7 +35,10 @@ public static boolean ageIsInRange1(User user) { } public static boolean ageIsInRange2(User user) { - return false; + Optional optUser = Optional.ofNullable(user); + Optional optUserAge = optUser.map(User::getAge).filter(v -> v >= 30).filter(v -> v <= 45); + + return optUserAge.isPresent(); } @Override From b03a00bbb64f6bad3a5ca8d0bc7224f878e90f1b Mon Sep 17 00:00:00 2001 From: woomin Date: Tue, 30 Jun 2020 15:30:14 +0900 Subject: [PATCH 8/9] Make getUser() by using orElse() method --- src/main/java/nextstep/optional/Users.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/nextstep/optional/Users.java b/src/main/java/nextstep/optional/Users.java index 6293040..56026ab 100644 --- a/src/main/java/nextstep/optional/Users.java +++ b/src/main/java/nextstep/optional/Users.java @@ -13,11 +13,6 @@ public class Users { new User("honux", 45)); User getUser(String name) { - for (User user : users) { - if (user.matchName(name)) { - return user; - } - } - return DEFAULT_USER; + return users.stream().filter(v -> v.matchName(name)).findFirst().orElse(DEFAULT_USER); } } From ba68db66373bcdf265e2ae83ed00bc18dac7bb6e Mon Sep 17 00:00:00 2001 From: woomin Date: Tue, 30 Jun 2020 15:35:10 +0900 Subject: [PATCH 9/9] Make of() method by using lambda and orElseThrow() --- src/main/java/nextstep/optional/Expression.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/nextstep/optional/Expression.java b/src/main/java/nextstep/optional/Expression.java index 1c98cd6..3318651 100644 --- a/src/main/java/nextstep/optional/Expression.java +++ b/src/main/java/nextstep/optional/Expression.java @@ -1,5 +1,7 @@ package nextstep.optional; +import java.util.stream.Stream; + enum Expression { PLUS("+"), MINUS("-"), TIMES("*"), DIVIDE("/"); @@ -14,12 +16,9 @@ private static boolean matchExpression(Expression e, String expression) { } static Expression of(String expression) { - for (Expression v : values()) { - if (matchExpression(v, expression)) { - return v; - } - } - - throw new IllegalArgumentException(String.format("%s는 사칙연산에 해당하지 않는 표현식입니다.", expression)); + return Stream.of(values()) + .filter(v -> matchExpression(v, expression)) + .findFirst() + .orElseThrow(IllegalArgumentException::new); } }