오늘 코드 리뷰는 어제 리뷰했던 자바 Collection에서 특정 값이 가장 큰 element를 가져오는 방법에 이어서 진행한다.
어제 요구사항이 자바 Collection에서 특정 값이 가장 큰 element를 가져오는 것이 목표였다면 오늘의 목표는 자바 Collection을 특정 문자를 추가해 합치는 방법이다.
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;
}
}
위와 같이 Car 클래스가 있고, position 값이 가장 큰 자동차가 3대라면 3대가 공동 우승이 된다.
List<Car> winnerCars = Arrays.asList(new Car("pobi"), new Car("crong"), new Car("honux"));
위와 같이 공동 우승이 3명이면 "pobi, crong, honux 자동차가 공동 우승입니다."와 같은 문자열을 출력하고 싶다. 자바 collection에 저장되어 있는 값을 쉼표 구분자로 어떻게 합치면 좋을까?
어제 코드에서는 for문을 통해 해결하고 있다.
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);
}
[...]
}
위 샘플 예제는 코드스쿼드 에서 새롭게 진행 중인 마스터즈 코스에서 발췌한 코드입니다. 코드스쿼드의 마스터즈 코스는 코드 리뷰 방식의 개인별 맞춤 학습 방법입니다.
0개의 의견 from FB
6개의 의견 from SLiPP
collection 을 쉼표 구분자로 합치는건 map 과 reduce 를 사용하여 해결해보았습니다.
"1등 자동차가 3대"를 빼는 로직이 좀 수정되어야 할 듯 하지만, 기존꺼에 연계해서하면 요로코롬... 결론적으로는 .collect(Collectors.joining(",")); 요거.
@Gaemi @eclipse4j 코드 좋네요. 코드 리뷰 글 작성하면서 저도 많이 배우네요.
모두 자바 8의 stream만 사용하고 있는데 stream 사용하지 않으면 어떨까요?
Collection에 담긴 값을 join하는 상황의 경우 stream을 이용할 수도 있지만 stream을 사용하는 것에 거부감이 있다면 String의 join만 사용해도 좋겠네요.
다음 코드는 A quick and easy way to join array elements with a separator (the opposite of split) in Java 참고.
1) Element를 직접 사용
2) 배열 사용
3) Iterable 사용
String Join과 관련해 Java 8 – StringJoiner example 문서도 참고하면 좋겠네요.
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.