Skip to content

Commit 9122851

Browse files
author
jsween5723
committed
refactor: stream 적용
1 parent 07a8ef9 commit 9122851

File tree

4 files changed

+31
-32
lines changed

4 files changed

+31
-32
lines changed

src/main/java/cleancode/studycafe/tobe/io/OutputHandler.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package cleancode.studycafe.tobe.io;
22

3-
import cleancode.studycafe.tobe.model.StudyCafeLockerPass;
43
import cleancode.studycafe.tobe.model.StudyCafePass;
54

65
import java.util.List;

src/main/java/cleancode/studycafe/tobe/io/StudyCafeFileHandler.java

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,12 @@ public List<StudyCafePass> readStudyCafePasses() {
1717
try {
1818
List<String> lines = Files.readAllLines(Paths.get("src/main/resources/cleancode/studycafe/pass-list.csv"));
1919
List<StudyCafePass> studyCafePasses = new ArrayList<>();
20-
for (String line : lines) {
21-
String[] values = line.split(",");
22-
StudyCafePassType studyCafePassType = StudyCafePassType.valueOf(values[0]);
23-
int duration = Integer.parseInt(values[1]);
24-
int price = Integer.parseInt(values[2]);
25-
double discountRate = Double.parseDouble(values[3]);
26-
var pass = switch (studyCafePassType) {
27-
case HOURLY -> StudyCafePass.hourlyOf(duration, price, discountRate);
28-
case WEEKLY -> StudyCafePass.weeklyOf(duration, price, discountRate);
29-
case FIXED ->
30-
StudyCafePass.fixedOf(duration, price, discountRate, lockerPasses.stream().filter((lockerPass -> lockerPass.isCompatible(duration))).findFirst().orElse(null));
31-
};
32-
studyCafePasses.add(pass);
33-
}
34-
35-
return studyCafePasses;
20+
return lines.stream().map(line -> line.split(","))
21+
.map(values -> {
22+
int duration = Integer.parseInt(values[1]);
23+
StudyCafeLockerPass locker = lockerPasses.stream().filter((lockerPass -> lockerPass.isCompatible(duration))).findFirst().orElse(null);
24+
return StudyCafePass.of(values, locker);
25+
}).toList();
3626
} catch (IOException e) {
3727
throw new RuntimeException("파일을 읽는데 실패했습니다.", e);
3828
}
@@ -41,17 +31,8 @@ public List<StudyCafePass> readStudyCafePasses() {
4131
private List<StudyCafeLockerPass> readLockerPasses() {
4232
try {
4333
List<String> lines = Files.readAllLines(Paths.get("src/main/resources/cleancode/studycafe/locker.csv"));
44-
List<StudyCafeLockerPass> lockerPasses = new ArrayList<>();
45-
for (String line : lines) {
46-
String[] values = line.split(",");
47-
int duration = Integer.parseInt(values[1]);
48-
int price = Integer.parseInt(values[2]);
49-
50-
StudyCafeLockerPass lockerPass = StudyCafeLockerPass.of(duration, price);
51-
lockerPasses.add(lockerPass);
52-
}
53-
54-
return lockerPasses;
34+
return lines.stream().map(line -> line.split(","))
35+
.map(StudyCafeLockerPass::fromValues).toList();
5536
} catch (IOException e) {
5637
throw new RuntimeException("파일을 읽는데 실패했습니다.", e);
5738
}

src/main/java/cleancode/studycafe/tobe/model/StudyCafeLockerPass.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,16 @@ private StudyCafeLockerPass(int duration, int price) {
1111
this.price = price;
1212
}
1313

14-
public static StudyCafeLockerPass of(int duration, int price) {
14+
private static StudyCafeLockerPass of(int duration, int price) {
1515
return new StudyCafeLockerPass(duration, price);
1616
}
1717

18+
public static StudyCafeLockerPass fromValues(String[] values) {
19+
int duration = Integer.parseInt(values[1]);
20+
int price = Integer.parseInt(values[2]);
21+
return StudyCafeLockerPass.of(duration, price);
22+
}
23+
1824
int getPrice() {
1925
return selected ? price : 0;
2026
}

src/main/java/cleancode/studycafe/tobe/model/StudyCafePass.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,31 @@ protected StudyCafePass(StudyCafePassType passType, int duration, int price, dou
1414
this.discountRate = discountRate;
1515
}
1616

17-
public static StudyCafePass weeklyOf(int duration, int price, double discountRate) {
17+
private static StudyCafePass weeklyOf(int duration, int price, double discountRate) {
1818
return new WeeklyStudyCafePass(duration, price, discountRate);
1919
}
2020

21-
public static StudyCafePass hourlyOf(int duration, int price, double discountRate) {
21+
private static StudyCafePass hourlyOf(int duration, int price, double discountRate) {
2222
return new HourlyStudyCafePass(duration, price, discountRate);
2323
}
2424

25-
public static StudyCafePass fixedOf(int duration, int price, double discountRate, StudyCafeLockerPass lockerPass) {
25+
private static StudyCafePass fixedOf(int duration, int price, double discountRate, StudyCafeLockerPass lockerPass) {
2626
return new FixedStudyCafePass(duration, price, discountRate, lockerPass);
2727
}
2828

29+
public static StudyCafePass of(String[] values, StudyCafeLockerPass lockerPass) {
30+
StudyCafePassType studyCafePassType = StudyCafePassType.valueOf(values[0]);
31+
int duration = Integer.parseInt(values[1]);
32+
int price = Integer.parseInt(values[2]);
33+
double discountRate = Double.parseDouble(values[3]);
34+
return switch (studyCafePassType) {
35+
case HOURLY -> hourlyOf(duration, price, discountRate);
36+
case WEEKLY -> weeklyOf(duration, price, discountRate);
37+
case FIXED ->
38+
fixedOf(duration, price, discountRate, lockerPass);
39+
};
40+
}
41+
2942
public StudyCafePassType getPassType() {
3043
return passType;
3144
}

0 commit comments

Comments
 (0)