programing

이미 StringBuilder가 있는데 왜 StringJoiner인가?

coolbiz 2021. 1. 18. 08:15
반응형

이미 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하여 형식화 된 출력을 생성하는 데 사용할 수 있습니다 .StreamCollectors.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

반응형