1. 리스트를 join을 이용하여 문자열로 바꿀때는 stream().collect를 이용하자!
private static final List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
다음과 같은 리스트가 있을때
1-2-3-4-5-6-7...-10 과 같은 문자열을 반환받고 싶다면 일반적으로는 다음과 같다.
final StringBuilder stringBuilder1 = new StringBuilder();
final int size = numbers.size();
for (int i = 0; i < size; i++) {
stringBuilder1.append(numbers.get(i));
if (i != size - 1) {
stringBuilder1.append(" : ");
}
}
StringBuilder를 이용하여 append로 값과 : 를 하나씩 추가한다.
마지막 인자에서는 :를 추가하지 않기 때문에 if문을 이용하여 처리한다.
이 같은 코드를 foreach로 표현하면 다음과 같아져야 한다.
final StringBuilder stringBuilder = new StringBuilder();
final String separator = " : ";
for (final Integer number : numbers) {
stringBuilder.append(number).append(separator);
}
final int stringLength = stringBuilder.length();
if (stringLength > 0) {
stringBuilder.delete(stringLength - separator.length(), stringLength);
}
더 복잡해졌다.
모든 경우에 append 한 후에
최종 값에서
StringBuilder.delete(자르는 시작 값(inclusive), 자르는 끝값(exclusive))를 이용하여 마지막 " : " 만 자른다.
스트림을 이용한다면 아주 쉽게 문제를 해결할 수 있다.
final String result = numbers.stream()
.map(String::valueOf)
.collect(joining(" : "));
스트림 객체로 전환 후에, map을 이용하여 Integer인 값을 String.valueOf로 캐스팅한다.
이후에 collect()를 이용하여 문자열을 만드는 메소드중 joining()을 이용하여 반환한다.
'Language > Java' 카테고리의 다른 글
[Java8]Functional Interface (0) | 2019.04.14 |
---|---|
[Java8] Strategy Pattern, FP, 1급 객체 (0) | 2019.04.14 |
[Java]Comparable, Comparator (0) | 2019.04.14 |
[Java]Collection 객체 응용(1) (0) | 2019.04.12 |
[Java] 자바 람다식 (0) | 2019.04.09 |