Skip to content

Commit 9889b8a

Browse files
authored
๐Ÿš€ 1๋‹จ๊ณ„ - ์ŠคํŠธ๋ฆผ, ๋žŒ๋‹ค, Optional (#2311)
* docs: ์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€ * feat: CarTest์˜ ์ต๋ช… ํด๋ž˜์Šค๋ฅผ ๋žŒ๋‹ค๋กœ ์ „ํ™˜ * feat: sumAll, sumAllEven method ๋žŒ๋‹ค๋ฅผ ํ™œ์šฉํ•ด ์ค‘๋ณต ์ œ๊ฑฐ * feat: countWords method filter ์ ์šฉ * feat: printLongestWordTop100 method filter ์ ์šฉ * feat: sumOverThreeAndDouble ๋ฉ”์„œ๋“œ ๊ตฌํ˜„, printLongestWordTop100 ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ * feat: getUser ๋ฉ”์†Œ๋“œ ์ž๋ฐ” 8์˜ stream๊ณผ Optional์„ ํ™œ์šฉํ•ด ๊ตฌํ˜„ * feat: getUser ๋ฉ”์†Œ๋“œ ์ž๋ฐ” 8์˜ stream๊ณผ Optional์„ ํ™œ์šฉํ•ด ๊ตฌํ˜„ * feat: Expression์˜ of ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„
1 parent 7200b62 commit 9889b8a

File tree

8 files changed

+59
-54
lines changed

8 files changed

+59
-54
lines changed

โ€ŽREADME.md

+14-1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,17 @@
66
* ๋ชจ๋“  ํ”ผ๋“œ๋ฐฑ์„ ์™„๋ฃŒํ•˜๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋„์ „ํ•˜๊ณ  ์•ž์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
77

88
## ์˜จ๋ผ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ณผ์ •
9-
* [ํ…์ŠคํŠธ์™€ ์ด๋ฏธ์ง€๋กœ ์‚ดํŽด๋ณด๋Š” ์˜จ๋ผ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ณผ์ •](https://github.com/nextstep-step/nextstep-docs/tree/master/codereview)
9+
* [ํ…์ŠคํŠธ์™€ ์ด๋ฏธ์ง€๋กœ ์‚ดํŽด๋ณด๋Š” ์˜จ๋ผ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ณผ์ •](https://github.com/nextstep-step/nextstep-docs/tree/master/codereview)
10+
11+
## step1
12+
- [x] CarTest์˜ ์ต๋ช… ํด๋ž˜์Šค๋ฅผ ๋žŒ๋‹ค๋กœ ์ „ํ™˜
13+
- [x] sumAll, sumAllEven method ๋žŒ๋‹ค๋ฅผ ํ™œ์šฉํ•ด ์ค‘๋ณต ์ œ๊ฑฐ
14+
- [x] sumOverThreeAndDouble() ๊ตฌํ˜„ - List์— ๋‹ด๊ธด ๋ชจ๋“  ์ˆซ์ž ์ค‘ 3๋ณด๋‹ค ํฐ ์ˆซ์ž๋ฅผ 2๋ฐฐ ํ•œ ํ›„ ๋ชจ๋“  ๊ฐ’์˜ ํ•ฉ์„ ๊ตฌํ•œ๋‹ค (map, reduce, filter๋ฅผ ํ™œ์šฉ)
15+
- [x] printLongestWordTop100() ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ (map, reduce, filter๋ฅผ ํ™œ์šฉ)
16+
- ๋‹จ์–ด์˜ ๊ธธ์ด๊ฐ€ 12์ž๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๋‹จ์–ด๋ฅผ ์ถ”์ถœ
17+
- 12์ž๊ฐ€ ๋„˜๋Š” ๋‹จ์–ด ์ค‘ ๊ธธ์ด๊ฐ€ ๊ธด ์ˆœ์„œ๋กœ 100๊ฐœ์˜ ๋‹จ์–ด๋ฅผ ์ถ”์ถœ
18+
- ๋‹จ์–ด ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ์„œ๋กœ ๋‹ค๋ฅธ ๋‹จ์–ด 100๊ฐœ๋ฅผ ์ถ”์ถœ
19+
- ์ถœํ•œ 100๊ฐœ์˜ ๋‹จ์–ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋ชจ๋“  ๋‹จ์–ด๋Š” ์†Œ๋ฌธ์ž๋กœ ์ถœ๋ ฅ
20+
- [x] ageIsInRange1() ๋ฉ”์†Œ๋“œ ๊ธฐ๋Šฅ Optional์„ ํ™œ์šฉํ•ด ageIsInRange2() ๋ฉ”์†Œ๋“œ์— ๊ตฌํ˜„
21+
- [x] getUser() ๋ฉ”์†Œ๋“œ๋ฅผ ์ž๋ฐ” 8์˜ stream๊ณผ Optional์„ ํ™œ์šฉํ•ด ๊ตฌํ˜„
22+
- [x] Expression์˜ of ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package nextstep.fp;
2+
3+
public interface Condition {
4+
boolean test(Integer number);
5+
}

โ€Žsrc/main/java/nextstep/fp/Lambda.java

+7-19
Original file line numberDiff line numberDiff line change
@@ -27,30 +27,18 @@ public void run() {
2727
}
2828

2929
public static int sumAll(List<Integer> numbers) {
30-
int total = 0;
31-
for (int number : numbers) {
32-
total += number;
33-
}
34-
return total;
30+
return sumAllByCondition(numbers, (number) -> true);
3531
}
3632

3733
public static int sumAllEven(List<Integer> numbers) {
38-
int total = 0;
39-
for (int number : numbers) {
40-
if (number % 2 == 0) {
41-
total += number;
42-
}
43-
}
44-
return total;
34+
return sumAllByCondition(numbers, (number) -> number % 2 == 0);
4535
}
4636

4737
public static int sumAllOverThree(List<Integer> numbers) {
48-
int total = 0;
49-
for (int number : numbers) {
50-
if (number > 3) {
51-
total += number;
52-
}
53-
}
54-
return total;
38+
return sumAllByCondition(numbers, (number) -> number > 3);
39+
}
40+
41+
private static int sumAllByCondition(List<Integer> numbers, Condition condition) {
42+
return numbers.stream().filter(condition::test).mapToInt(Integer::intValue).sum();
5543
}
5644
}

โ€Žsrc/main/java/nextstep/fp/StreamStudy.java

+10-8
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,21 @@ public static long countWords() throws IOException {
1515
.get("src/main/resources/fp/war-and-peace.txt")), StandardCharsets.UTF_8);
1616
List<String> words = Arrays.asList(contents.split("[\\P{L}]+"));
1717

18-
long count = 0;
19-
for (String w : words) {
20-
if (w.length() > 12) count++;
21-
}
22-
return count;
18+
return words.stream().filter(w -> w.length() > 12).count();
2319
}
2420

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

30-
// TODO ์ด ๋ถ€๋ถ„์— ๊ตฌํ˜„ํ•œ๋‹ค.
26+
words.stream()
27+
.filter(word -> word.length() > 12)
28+
.sorted((s1, s2) -> Integer.compare(s2.length(), s1.length()))
29+
.distinct()
30+
.limit(100)
31+
.map(String::toLowerCase)
32+
.forEach(System.out::println);
3133
}
3234

3335
public static List<Integer> doubleNumbers(List<Integer> numbers) {
@@ -39,6 +41,6 @@ public static long sumAll(List<Integer> numbers) {
3941
}
4042

4143
public static long sumOverThreeAndDouble(List<Integer> numbers) {
42-
return 0;
44+
return numbers.stream().filter(number -> number > 3).map(number -> number * 2).reduce(0, Integer::sum);
4345
}
44-
}
46+
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package nextstep.optional;
22

3+
import java.util.Arrays;
4+
35
enum Expression {
46
PLUS("+"), MINUS("-"), TIMES("*"), DIVIDE("/");
57

@@ -14,12 +16,9 @@ private static boolean matchExpression(Expression e, String expression) {
1416
}
1517

1618
static Expression of(String expression) {
17-
for (Expression v : values()) {
18-
if (matchExpression(v, expression)) {
19-
return v;
20-
}
21-
}
22-
23-
throw new IllegalArgumentException(String.format("%s๋Š” ์‚ฌ์น™์—ฐ์‚ฐ์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ํ‘œํ˜„์‹์ž…๋‹ˆ๋‹ค.", expression));
19+
return Arrays.stream(values())
20+
.filter(value -> matchExpression(value, expression))
21+
.findFirst()
22+
.orElseThrow(() -> new IllegalArgumentException(String.format("%s๋Š” ์‚ฌ์น™์—ฐ์‚ฐ์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ํ‘œํ˜„์‹์ž…๋‹ˆ๋‹ค.", expression)));
2423
}
2524
}

โ€Žsrc/main/java/nextstep/optional/User.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package nextstep.optional;
22

3+
import java.util.Optional;
4+
35
public class User {
46
private String name;
57
private Integer age;
@@ -33,7 +35,15 @@ public static boolean ageIsInRange1(User user) {
3335
}
3436

3537
public static boolean ageIsInRange2(User user) {
36-
return false;
38+
Optional<User> optionalUser = Optional.ofNullable(user);
39+
if(optionalUser.isEmpty()){
40+
return false;
41+
}
42+
return optionalUser
43+
.filter(targetUser -> targetUser.getAge() != null)
44+
.filter(targetUser -> targetUser.getAge() >= 30)
45+
.filter(targetUser -> targetUser.getAge() <= 45)
46+
.isPresent();
3747
}
3848

3949
@Override

โ€Žsrc/main/java/nextstep/optional/Users.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,9 @@ public class Users {
1313
new User("honux", 45));
1414

1515
User getUser(String name) {
16-
for (User user : users) {
17-
if (user.matchName(name)) {
18-
return user;
19-
}
20-
}
21-
return DEFAULT_USER;
16+
return users.stream()
17+
.filter(user -> user.matchName(name))
18+
.findFirst()
19+
.orElse(DEFAULT_USER);
2220
}
2321
}

โ€Žsrc/test/java/nextstep/fp/CarTest.java

+2-12
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,14 @@ public class CarTest {
88
@Test
99
public void ์ด๋™() {
1010
Car car = new Car("pobi", 0);
11-
Car actual = car.move(new MoveStrategy() {
12-
@Override
13-
public boolean isMovable() {
14-
return true;
15-
}
16-
});
11+
Car actual = car.move(() -> true);
1712
assertThat(actual).isEqualTo(new Car("pobi", 1));
1813
}
1914

2015
@Test
2116
public void ์ •์ง€() {
2217
Car car = new Car("pobi", 0);
23-
Car actual = car.move(new MoveStrategy() {
24-
@Override
25-
public boolean isMovable() {
26-
return false;
27-
}
28-
});
18+
Car actual = car.move(() -> false);
2919
assertThat(actual).isEqualTo(new Car("pobi", 0));
3020
}
3121
}

0 commit comments

Comments
ย (0)