Skip to content

3주차 - Step1 리뷰 요청 드립니다. #149

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

Merged
merged 4 commits into from
Jun 28, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 {
boolean test(int number);
}
37 changes: 11 additions & 26 deletions src/main/java/nextstep/fp/Lambda.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,39 +18,24 @@ 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(() -> System.out.println("Hello from thread")).start();
}

public static int sum(List<Integer> numbers, Conditional condition) {
return numbers.stream()
.filter(condition::test)
.reduce(0, Integer::sum);
}

public static int sumAll(List<Integer> numbers) {
int total = 0;
for (int number : numbers) {
total += number;
}
return total;
return sum(numbers, number -> true);
}

public static int sumAllEven(List<Integer> numbers) {
int total = 0;
for (int number : numbers) {
if (number % 2 == 0) {
total += number;
}
}
return total;
return sum(numbers, number -> number % 2 == 0);
}

public static int sumAllOverThree(List<Integer> numbers) {
int total = 0;
for (int number : numbers) {
if (number > 3) {
total += number;
}
}
return total;
return sum(numbers, number -> number > 3);
}
}
18 changes: 14 additions & 4 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 @@ -22,12 +23,18 @@ public static long countWords() throws IOException {
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 이 부분에 구현한다.

return words.stream()
.filter(word -> word.length() > 12)
.distinct()
.limit(100)
.sorted(Comparator.comparing(String::length).reversed())
.map(String::toLowerCase)
.collect(Collectors.toList());
}

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

public static long sumOverThreeAndDouble(List<Integer> numbers) {
return 0;
return numbers.stream()
.filter(number -> number > 3)
.map(number -> 2 * number)
.reduce(0, Integer::sum);
}
}
13 changes: 6 additions & 7 deletions src/main/java/nextstep/optional/Expression.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package nextstep.optional;

import java.util.Arrays;

enum Expression {
PLUS("+"), MINUS("-"), TIMES("*"), DIVIDE("/");

Expand All @@ -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 Arrays.stream(Expression.values())
.filter(value -> matchExpression(value, expression))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException(String.format("%s는 사칙연산에 해당하지 않는 표현식입니다.", expression)));
}
}
9 changes: 8 additions & 1 deletion src/main/java/nextstep/optional/User.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package nextstep.optional;

import jdk.nashorn.internal.runtime.options.Option;

import java.util.Optional;

public class User {
private String name;
private Integer age;
Expand Down Expand Up @@ -33,7 +37,10 @@ public static boolean ageIsInRange1(User user) {
}

public static boolean ageIsInRange2(User user) {
return false;
return Optional.ofNullable(user)
.map(User::getAge)
.filter(age -> age >= 30 && age <= 45)
.isPresent();
}

@Override
Expand Down
10 changes: 4 additions & 6 deletions src/main/java/nextstep/optional/Users.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,9 @@ 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(user -> user.matchName(name))
.findFirst()
.orElse(DEFAULT_USER);
}
}
26 changes: 14 additions & 12 deletions src/test/java/nextstep/fp/CarTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,29 @@
import static org.assertj.core.api.Assertions.assertThat;

public class CarTest {
// @Test
// public void 이동() {
// Car car = new Car("pobi", 0);
// Car actual = car.move(new MoveStrategy() {
// @Override
// public boolean isMovable() {
// return 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 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));
}
}
2 changes: 1 addition & 1 deletion src/test/java/nextstep/fp/StreamStudyTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public void countWords() throws Exception {

@Test
public void printLongestWordTop100() throws Exception {
StreamStudy.printLongestWordTop100();
StreamStudy.printLongestWordTop100().forEach(System.out::println);
}

@Test
Expand Down