Skip to content

파라미터가 없는 익명함수 람다식으로 변경 #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
6 changes: 6 additions & 0 deletions src/main/java/nextstep/fp/Conditional.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package nextstep.fp;

@FunctionalInterface
public interface Conditional {
abstract boolean test(Integer number);
}
31 changes: 21 additions & 10 deletions src/main/java/nextstep/fp/Lambda.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package nextstep.fp;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Lambda {
public class Lambda implements Conditional{
public static void printAllOld(List<Integer> numbers) {
System.out.println("printAllOld");

Expand All @@ -18,23 +20,26 @@ public static void printAllLambda(List<Integer> numbers) {
}

public static void runThread() {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello from thread");
}
}).start();
// new Thread(new Runnable() {
// @Override
// public void run() {
// System.out.println("Hello from thread");
// }
// }).start();
// 추상메서드(abstract method) 가 한개인 Runnable 인터페이스를 파라미터로 받아 생성하는 Thread를 람다식으로 변경
new Thread(() -> System.out.println("Hello from thread"));
}

public static int sumAll(List<Integer> numbers) {
public static int sumAll(List<Integer> numbers,Conditional conditional) {
int total = 0;
for (int number : numbers) {
total += number;
}

return total;
}

public static int sumAllEven(List<Integer> numbers) {
public static int sumAllEven(List<Integer> numbers,Conditional conditional) {
int total = 0;
for (int number : numbers) {
if (number % 2 == 0) {
Expand All @@ -44,13 +49,19 @@ public static int sumAllEven(List<Integer> numbers) {
return total;
}

public static int sumAllOverThree(List<Integer> numbers) {
public static int sumAllOverThree(List<Integer> numbers, Conditional conditional) {
int total = 0;
for (int number : numbers) {
if (number > 3) {
total += number;
}
}

return total;
}

@Override
public boolean test(Integer number) {
return false;
}
}
26 changes: 21 additions & 5 deletions src/main/java/nextstep/fp/StreamStudy.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

Expand All @@ -16,18 +17,28 @@ public static long countWords() throws IOException {
List<String> words = Arrays.asList(contents.split("[\\P{L}]+"));

long count = 0;
for (String w : words) {
if (w.length() > 12) count++;
}
// for (String w : words) {
// if (w.length() > 12) count++;
// }
count = words.stream().filter(word -> word.length() > 12 ).count();
return count;
}

public static void printLongestWordTop100() throws IOException {
public static List<String> printLongestWordTop100() throws IOException {
String contents = new String(Files.readAllBytes(Paths
.get("src/main/resources/fp/war-and-peace.txt")), StandardCharsets.UTF_8);
List<String> words = Arrays.asList(contents.split("[\\P{L}]+"));

// TODO 이 부분에 구현한다.
List<String> longestSortedWordsTop100 = words.stream()
.distinct()
.filter(word -> word.length() > 12)
.sorted((a,b) -> {return b.length() - a.length();})
.limit(100)
.map(word -> word.toLowerCase())
.collect(Collectors.toList());

return longestSortedWordsTop100;
}

public static List<Integer> doubleNumbers(List<Integer> numbers) {
Expand All @@ -39,6 +50,11 @@ public static long sumAll(List<Integer> numbers) {
}

public static long sumOverThreeAndDouble(List<Integer> numbers) {
return 0;
long result = numbers.stream()
.filter(number -> number > 3)
.map(number -> number * 2)
.reduce(0, (x, y) -> x + y);

return result;
}
}
22 changes: 15 additions & 7 deletions src/test/java/nextstep/fp/CarTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,18 @@ 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(new MoveStrategy() {
// @Override
// public boolean isMovable() {
// return true;
// }
// });

Car lambdaCar = car.move(() ->{
return true;
});
assertThat(actual).isEqualTo(new Car("pobi", 1));

assertThat(lambdaCar).isEqualTo(new Car("pobi", 1));
}

@Test
Expand All @@ -26,6 +31,9 @@ public boolean isMovable() {
return false;
}
});
assertThat(actual).isEqualTo(new Car("pobi", 0));

Car lambdaCar = car.move(() -> {return false;});

assertThat(lambdaCar).isEqualTo(new Car("pobi", 0));
}
}
6 changes: 3 additions & 3 deletions src/test/java/nextstep/fp/LambdaTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,19 @@ public void runThread() throws Exception {

@Test
public void sumAll() throws Exception {
int sum = Lambda.sumAll(numbers);
int sum = Lambda.sumAll(numbers,(number) -> true);
assertThat(sum).isEqualTo(21);
}

@Test
public void sumAllEven() throws Exception {
int sum = Lambda.sumAllEven(numbers);
int sum = Lambda.sumAllEven(numbers,(number -> number %2 ==0));
assertThat(sum).isEqualTo(12);
}

@Test
public void sumAllOverThree() throws Exception {
int sum = Lambda.sumAllOverThree(numbers);
int sum = Lambda.sumAllOverThree(numbers, (number) -> number > 3);
assertThat(sum).isEqualTo(15);
}
}
3 changes: 2 additions & 1 deletion src/test/java/nextstep/fp/StreamStudyTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ public void countWords() throws Exception {

@Test
public void printLongestWordTop100() throws Exception {
StreamStudy.printLongestWordTop100();
List<String> top100Words = StreamStudy.printLongestWordTop100();
top100Words.forEach(System.out::println);
}

@Test
Expand Down