Skip to content
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

๐Ÿš€ 1๋‹จ๊ณ„ - ์ŠคํŠธ๋ฆผ, ๋žŒ๋‹ค, Optional #2326

Merged
merged 7 commits into from
Apr 6, 2025
41 changes: 16 additions & 25 deletions src/main/java/nextstep/fp/Lambda.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,39 +18,30 @@ 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 sumAll(List<Integer> numbers) {
int total = 0;
for (int number : numbers) {
total += number;
}
return total;
return sum(numbers, it -> 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, it -> it % 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, it -> it > 3);
}

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

@FunctionalInterface
public interface Conditional {
boolean test(Integer number);
}
}
8 changes: 7 additions & 1 deletion src/main/java/nextstep/fp/StreamStudy.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ public static void printLongestWordTop100() throws IOException {
List<String> words = Arrays.asList(contents.split("[\\P{L}]+"));

// TODO ์ด ๋ถ€๋ถ„์— ๊ตฌํ˜„ํ•œ๋‹ค.
words.stream()
.filter(word -> word.length() > 12)
.sorted((a, b) -> b.length() - a.length())
.distinct()
.limit(100)
.forEach(System.out::println);
}

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

public static long sumOverThreeAndDouble(List<Integer> numbers) {
return 0;
return numbers.stream().filter(it -> it > 3).map(it -> it * 2).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(values())
.filter(e -> matchExpression(e, expression))
.findAny()
.orElseThrow(() -> new IllegalArgumentException(String.format("%s๋Š” ์‚ฌ์น™์—ฐ์‚ฐ์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ํ‘œํ˜„์‹์ž…๋‹ˆ๋‹ค.", expression)));
}
}
8 changes: 7 additions & 1 deletion src/main/java/nextstep/optional/User.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package nextstep.optional;

import java.util.Optional;

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

public static boolean ageIsInRange2(User user) {
return false;
return Optional.ofNullable(user)
.filter(it -> it.getAge() != null)
.filter(it -> it.getAge() >= 30)
.filter(it -> it.getAge() <= 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);
}
}
14 changes: 2 additions & 12 deletions src/test/java/nextstep/fp/CarTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}
}