diff --git a/src/main/java/racingcar/domain/Car.java b/src/main/java/racingcar/domain/Car.java index 4f2106730..0b3cf1799 100644 --- a/src/main/java/racingcar/domain/Car.java +++ b/src/main/java/racingcar/domain/Car.java @@ -15,7 +15,19 @@ public void race() { position.move(); } + public boolean isWinner(int maxPosition) { + return position.isSame(maxPosition); + } + public String getRacingResult() { return String.format(OutputMessage.RACING_RESULT.toString(), name.getValue(), position.getValue()); } + + public Position getPosition() { + return position; + } + + public Name getName() { + return name; + } } diff --git a/src/main/java/racingcar/domain/Cars.java b/src/main/java/racingcar/domain/Cars.java index d79d3f9bd..2975100ed 100644 --- a/src/main/java/racingcar/domain/Cars.java +++ b/src/main/java/racingcar/domain/Cars.java @@ -1,7 +1,9 @@ package racingcar.domain; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; public class Cars { @@ -23,4 +25,21 @@ public String getRacingResult() { ); return stringBuilder.toString(); } + + public List getWinner() { + int maxPosition = calculateMaxPosition(); + return cars.stream() + .filter(car -> car.isWinner(maxPosition)) + .map(Car::getName) + .collect(Collectors.toList()); + } + + public int calculateMaxPosition() { + List positions = cars.stream() + .map(Car::getPosition) + .mapToInt(Position::getPosition) + .boxed() + .collect(Collectors.toList()); + return Collections.max(positions); + } }