diff --git a/src/main/java/controller/LadderGameController.java b/src/main/java/controller/LadderGameController.java index 5be2a3df..9deb0c50 100644 --- a/src/main/java/controller/LadderGameController.java +++ b/src/main/java/controller/LadderGameController.java @@ -1,6 +1,5 @@ package controller; -import domain.CountOfLine; import domain.Height; import domain.Ladder; import domain.RungsBuilder; diff --git a/src/main/java/domain/CountOfLine.java b/src/main/java/domain/CountOfLine.java index 9ea18dd2..c0fd1d0d 100644 --- a/src/main/java/domain/CountOfLine.java +++ b/src/main/java/domain/CountOfLine.java @@ -1,9 +1,12 @@ package domain; +import java.util.function.Predicate; import util.Errors; public record CountOfLine(int value) { + private static final Predicate ismpty = value -> value <= 0; + public CountOfLine { validate(value); } @@ -13,7 +16,7 @@ private void validate(int value) { } private void validateIsNotEmpty(int value) { - if (value <= 0) { + if (ismpty.test(value)) { throw new IllegalArgumentException(Errors.LADDERS_MUST_CONTAINS_LEAST_ONE_LADDER); } } diff --git a/src/main/java/domain/Height.java b/src/main/java/domain/Height.java index f6408d6d..84be2e89 100644 --- a/src/main/java/domain/Height.java +++ b/src/main/java/domain/Height.java @@ -1,9 +1,12 @@ package domain; +import java.util.function.Predicate; import util.Errors; public record Height(int value) { + private static final Predicate isNegative = value -> value <= 0; + public Height { validate(value); } @@ -13,7 +16,7 @@ private void validate(int value) { } private void validatePositive(int value) { - if (value <= 0) { + if (isNegative.test(value)) { throw new IllegalArgumentException(Errors.LADDER_HEIGHT_MUST_BE_POSITIVE); } } diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/Ladder.java index 6488a9d9..0ec013cf 100644 --- a/src/main/java/domain/Ladder.java +++ b/src/main/java/domain/Ladder.java @@ -32,11 +32,8 @@ private void validateLaddersHeight(List lines) { } private void validatePointStatus(List lines) { - for (int index = 0; index < lines.size() - 1; index++) { - Line nowLine = lines.get(index); - Line nextLine = lines.get(index + 1); - validateRungInSamePosition(nowLine, nextLine); - } + IntStream.range(0, lines.size() - 1) + .forEach(index -> validateRungInSamePosition(lines.get(index), lines.get(index + 1))); } private void validateRungInSamePosition(Line nowLine, Line nextLine) { @@ -46,8 +43,7 @@ private void validateRungInSamePosition(Line nowLine, Line nextLine) { } private boolean isRungInSamePosition(Line nowLine, Line nextLine) { - int maxPosition = nowLine.getHeight(); - return IntStream.range(0, maxPosition) + return IntStream.range(0, nowLine.getHeight()) .allMatch( position -> nowLine.isConnectedToRightLineAt(position) == nextLine.isConnectedToLeftLineAt(position)); } @@ -68,8 +64,8 @@ public Map getResult() { for (int nowIndex = 0; nowIndex < lines.size(); nowIndex++) { int finalIndex = calculateTargetIndex(nowIndex, height); - String name = getNameOfLine(nowIndex); - String outcome = getOutcomeOfLine(finalIndex); + String name = getNameOfLine(nowIndex); + String outcome = getOutcomeOfLine(finalIndex); result.put(name, outcome); } return result; diff --git a/src/main/java/domain/Line.java b/src/main/java/domain/Line.java index d9e23db3..d31f0a79 100644 --- a/src/main/java/domain/Line.java +++ b/src/main/java/domain/Line.java @@ -1,7 +1,8 @@ package domain; -import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; import util.Errors; public class Line { @@ -17,14 +18,13 @@ private Line(Player player, String outcome, List points) { this.points = points; } - public static Line of(Player player, String outcome, List leftRungsStatus, List rightRungsStatus) { + public static Line of(Player player, String outcome, List leftRungsStatus, + List rightRungsStatus) { validateHeight(leftRungsStatus, rightRungsStatus); - int maxPosition = leftRungsStatus.size(); - List points = new ArrayList<>(); - for (int position = 0; position < maxPosition; position++) { - points.add(new Point(leftRungsStatus.get(position), rightRungsStatus.get(position))); - } + List points = IntStream.range(0, leftRungsStatus.size()) + .mapToObj(position -> new Point(leftRungsStatus.get(position), rightRungsStatus.get(position))) + .collect(Collectors.toList()); return new Line(player, outcome, points); } @@ -35,11 +35,9 @@ private static void validateHeight(List leftRungsStatus, List } public List getRightStatus() { - List rightStatus = new ArrayList<>(); - for (Point point : points) { - rightStatus.add(point.isConnectedToRightLadder()); - } - return rightStatus; + return points.stream() + .map(Point::isConnectedToRightLadder) + .collect(Collectors.toList()); } public int getHeight() { @@ -55,12 +53,12 @@ public String getOutcome() { } public boolean isConnectedToLeftLineAt(int position) { - Point nowPoint = this.points.get(position); + Point nowPoint = this.points.get(position); return nowPoint.isConnectedToLeftLadder(); } public boolean isConnectedToRightLineAt(int position) { - Point nowPoint = this.points.get(position); + Point nowPoint = this.points.get(position); return nowPoint.isConnectedToRightLadder(); } diff --git a/src/main/java/domain/RandomRungsBuilder.java b/src/main/java/domain/RandomRungsBuilder.java index 3feb3d83..20472e32 100644 --- a/src/main/java/domain/RandomRungsBuilder.java +++ b/src/main/java/domain/RandomRungsBuilder.java @@ -1,6 +1,5 @@ package domain; -import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.stream.Collectors; @@ -16,12 +15,9 @@ public RandomRungsBuilder() { @Override public List buildAndGetRungsStatus(List prevRungsStatus) { - List rungsStatus = new ArrayList<>(); - for (Boolean doesPrevLadderHaveRung : prevRungsStatus) { - boolean nowRungsStatus = generateRungIfAbsent(doesPrevLadderHaveRung); - rungsStatus.add(nowRungsStatus); - } - return rungsStatus; + return prevRungsStatus.stream() + .map(this::generateRungIfAbsent) + .collect(Collectors.toList()); } private boolean generateRungIfAbsent(Boolean doesPrevLadderHaveRung) { diff --git a/src/main/java/service/LadderService.java b/src/main/java/service/LadderService.java index 3694e342..cc789950 100644 --- a/src/main/java/service/LadderService.java +++ b/src/main/java/service/LadderService.java @@ -23,7 +23,7 @@ public LadderService(RungsBuilder rungsBuilder) { } public Ladder createLadder(Height height, List names, List outcomes) { - final List players = getPlayers(names); + List players = getPlayers(names); CountOfLine countOfLine = getcountOfLine(players, outcomes); List lineCollection = createLineCollection(countOfLine, height, players, outcomes); return new Ladder(lineCollection);