이미 StringBuilder가 있는데 왜 StringJoiner인가?
나는 최근 StringJoiner
에 구분자를 사용하여 String을 추가하고 접두사와 접미사를 추가 하는 Java 8 클래스 를 StringBuilder
만났지만 백엔드 에서도 사용 하고 매우 간단한 작업을 수행 하므로이 클래스의 필요성을 이해할 수 없습니다 . 문자열.
이 수업의 실제 목적을 실제로 이해하지 못해서 뭔가 놓치고 있습니까?
StringJoiner
.NET에서 문자열을 결합해야 할 때 매우 유용합니다 Stream
.
예를 들어, 문자열 목록을 따라야하는 경우 :
final List<String> strings = Arrays.asList("Foo", "Bar", "Baz");
사용하기가 훨씬 더 간단합니다.
final String collectJoin = strings.stream().collect(Collectors.joining(", "));
다음과 같이 StringBuilder
:
final String collectBuilder =
strings.stream().collect(Collector.of(StringBuilder::new,
(stringBuilder, str) -> stringBuilder.append(str).append(", "),
StringBuilder::append,
StringBuilder::toString));
StringJoiner Javadoc 의 예제는 이를 다루는 데 매우 능숙합니다. 항목을 추가하는 행위에서 분리 자 선택을 추상화하는 요점. 예를 들어 결합자를 만들고 사용할 구분자를 지정하고 라이브러리에 전달하여 요소를 추가하거나 그 반대의 경우도 가능합니다.
문자열 "[George : Sally : Fred]"는 다음과 같이 구성 될 수 있습니다.
StringJoiner sj = new StringJoiner(":", "[", "]"); sj.add("George").add("Sally").add("Fred"); String desiredString = sj.toString();
Collectors.joining (CharSequence)을 사용하여 스트림에서 형식화 된 출력을 생성하기 위해 StringJoiner를 사용할 수 있습니다. 예를 들면 :
List<Integer> numbers = Arrays.asList(1, 2, 3, 4); String commaSeparatedNumbers = numbers.stream() .map(i -> i.toString()) .collect(Collectors.joining(", "));
일부 사용 사례에서 코드를 단순화 할 수 있습니다.
List<String> list = // ...;
// with StringBuilder
StringBuilder builder = new StringBuilder();
builder.append("[");
if (!list.isEmpty()) {
builder.append(list.get(0));
for (int i = 1, n = list.size(); i < n; i++) {
builder.append(",").append(list.get(i));
}
}
builder.append("]");
// with StringJoiner
StringJoiner joiner = new StringJoiner(",", "[", "]");
for (String element : list) {
joiner.add(element);
}
StringJoiner
인터페이스를 구현하지 않지만 일종의 CollectorCollector
입니다. 그냥 그렇게 동작합니다. 구분 기호, 접두사 및 접미사를 전달할 수있는 것 외에도 . 를 호출 StringJoiner
하여 형식화 된 출력을 생성하는 데 사용할 수 있습니다 .Stream
Collectors.joining(CharSequence)
이것은 병렬 스트림으로 작업 할 때 특히 유용합니다 . 어떤 시점에서 병렬로 처리되는 일괄 처리가 결합 되어야 하고 여기서 StringJoiner
발생하기 때문입니다.
StringJoiner는 StringBuilder를 사용하는 것보다 훨씬 간단합니다. 매우 간단한 코드는 다음과 같습니다.
StringJoiner sj = new StringJoiner(",");
sj.add("aaa");
sj.add("bbb");
sj.add("ccc");
String result = sj.toString(); //aaa,bbb,ccc
참조 URL : https://stackoverflow.com/questions/27522563/why-stringjoiner-when-we-already-have-stringbuilder
'programing' 카테고리의 다른 글
v-btn 내부 라우팅과 라우터 링크 사용의 차이점 (0) | 2022.07.02 |
---|---|
뮤텍스가 폐기 될 때 방출되지 않는 이유는 무엇입니까? (0) | 2021.01.18 |
VSCode에서 TypeScript 경고를 비활성화하는 방법은 무엇입니까? (0) | 2021.01.18 |
Java EE webapp에서 Windows 인증을 사용하여 SQL Server에 연결할 수 있습니까? (0) | 2021.01.18 |
정규식을 어떻게 단위 테스트합니까? (0) | 2021.01.18 |