다음 코드는 List
Car 클래스 코드는 다음과 같습니다.
public class Car {
private String carName;
private int position;
public Car(String carName) {
super();
this.carName = carName;
}
public String getCarName() {
return carName;
}
public int getPosition() {
return position;
}
}
위와 같이 name과 position을 필드로 가지고 있는 Car 클래스의 목록에서 position 값이 가장 큰 Car를 추출하는 코드를 다음과 같이 구현했는데요. 아래 코드를 어떻게 하면 가장 간결하게 구현할 수 있을까요?
public class ResultView {
private Cars cars = null;
private String getTopRankedCar(List<Car> carList) {
String topCarString = "";
cars = new Cars(carList);
int maxPosition = getMaxPosition(carList);
for(int i=0; i<carList.size(); i++) {
if(cars.getPosition(i)==maxPosition) topCarString += cars.getCarName(i) + ", ";
}
return topCarString.substring(0, topCarString.length()-2);
}
private int getMaxPosition(List<Car> carList) {
int maxPosition = 0;
cars = new Cars(carList);
for(int i=0; i<carList.size(); i++) {
if(maxPosition < cars.getPosition(i)) maxPosition = cars.getPosition(i);
}
return maxPosition;
}
}
구현해야할 기능 목록을 다음과 같겠네요. * List에서 position 값이 가장 큰 Car 목록을 구한다. * 앞에서 구한 Car 목록을 활용해 출력 메시지를 생성한다.
위 샘플 예제는 코드스쿼드 에서 새롭게 진행 중인 마스터즈 코스에서 발췌한 코드입니다. 코드스쿼드의 마스터즈 코스는 코드 리뷰 방식의 개인별 맞춤 학습 방법입니다.
0개의 의견 from FB
네 ㅋㅋ 아마 학생분이 스트림을 좀 더 잘 안다면
로 줄일수도 있습니다.
:: 도 안다는 가정하에...
8개의 의견 from SLiPP
Sort에 대한 각 Comparator는 Car에서 몇개 들고 있어도 될 듯 하지만..여튼 요로코롬 해봤습니다.
로 구현할수있을것 같아요
@eclipse4j stream()을 활용한 현란한 코드를 보네.
@창천향로 오호. 더 짧은 코드가 등장했네요. 저 코드가 동작하나요? 함 테스트해봐야겠네요.
@자바지기 ㅋㅋ 저건 stream에 Optional까지 들어간거라..( 요건상 null이 있을 수도 있다면 Optional까지 본다던지, filter처리를 한다던지 하는게 맞다고 보고. 아니라면 아래의 내용으로 .) 사실 @정휘준님 얘기 처럼 Collections.max() 요런게 편하기는 하죠.
@창천향로님 코드가 더 깔끔하겠네요. 명시적 max라. int maxposition = cars.stream().max((o1, o2) -> Integer.compare(o1.getPosition(), o2.getPosition())).get().getPosition();
그럼 조금 더 줄여서..
int maxposition = cars.stream().max(Comparator.comparingInt(o->o.getPosition())).get().getPosition();
네 ㅋㅋ 아마 학생분이 스트림을 좀 더 잘 안다면
로 줄일수도 있습니다.
:: 도 안다는 가정하에...
Car 클래스에 comparable을 구현하고 스트림에서 사용해도 될꺼 같은데요.
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.