Рубрики
Без рубрики

Java 8 StringJoiner

Краткое и практическое руководство по StringJoiner на Java.

Автор оригинала: baeldung.

1. введение

StringJoiner – это новый класс, добавленный в Java 8 в разделе java.util package.

Проще говоря, его можно использовать для соединения строк с использованием разделителя, префикса и суффикса.

2. Добавление Элементов

Мы можем добавить Строки с помощью метода add() :

@Test
public void whenAddingElements_thenJoinedElements() {
    StringJoiner joiner = new StringJoiner(",", PREFIX, SUFFIX);
    joiner.add("Red")
      .add("Green")
      .add("Blue");

    assertEquals(joiner.toString(), "[Red,Green,Blue]");
}

Если мы хотим объединить все элементы списка, нам придется выполнить цикл по списку. К сожалению, нет простого способа сделать это с помощью StringJoiner :

@Test
public void whenAddingListElements_thenJoinedListElements() {
    List rgbList = new ArrayList<>();
    rgbList.add("Red");
    rgbList.add("Green");
    rgbList.add("Blue");

    StringJoiner rgbJoiner = new StringJoiner(
      ",", PREFIX, SUFFIX);

    for (String color : rgbList) {
        rgbJoiner.add(color);
    }

    assertEquals(rgbJoiner.toString(), "[Red,Green,Blue]");
}

3. Строительство

Чтобы создать экземпляр StringJoiner, нам нужно упомянуть разделитель. Дополнительно мы также можем указать префикс и суффикс, которые должны присутствовать в результате:

private String PREFIX = "[";
private String SUFFIX = "]";

@Test
public void whenEmptyJoinerWithoutPrefixSuffix_thenEmptyString() {
    StringJoiner joiner = new StringJoiner(",");
 
    assertEquals(0, joiner.toString().length());
}

@Test
public void whenEmptyJoinerJoinerWithPrefixSuffix_thenPrefixSuffix() {
    StringJoiner joiner = new StringJoiner(
      ",", PREFIX, SUFFIX);
 
    assertEquals(joiner.toString(), PREFIX + SUFFIX);
}

Мы используем toString() для получения текущего значения от столяра.

Обратите внимание на значения по умолчанию, возвращаемые соединителями. A Joiner без префикса и суффикса возвращает пустую Строку , тогда как joiner с префиксом и суффиксом возвращает Строку , содержащую как префикс, так и суффикс.

Мы можем изменить значение по умолчанию String , возвращаемое с помощью setEmptyValue() :

@Test
public void whenEmptyJoinerWithEmptyValue_thenDefaultValue() {
    StringJoiner joiner = new StringJoiner(",");
    joiner.setEmptyValue("default");

    assertEquals(joiner.toString(), "default");
}

@Test
public void whenEmptyJoinerWithPrefixSuffixAndEmptyValue_thenDefaultValue() {
    StringJoiner joiner = new StringJoiner(",", PREFIX, SUFFIX);
    joiner.setEmptyValue("default");

    assertEquals(joiner.toString(), "default");
}

Здесь оба соединителя возвращают константу EMPTY_JOINER .

Значение по умолчанию возвращается только тогда, когда Соединитель строк пусто.

4. Объединение Столяров

Мы можем объединить два соединителя с помощью merge() . Он добавляет содержимое данного StringJoiner без префикса и суффикса в качестве следующего элемента:

@Test
public void whenMergingJoiners_thenReturnMerged() {
    StringJoiner rgbJoiner = new StringJoiner(
      ",", PREFIX, SUFFIX);
    StringJoiner cmybJoiner = new StringJoiner(
      "-", PREFIX, SUFFIX);

    rgbJoiner.add("Red")
      .add("Green")
      .add("Blue");
    cmybJoiner.add("Cyan")
      .add("Magenta")
      .add("Yellow")
      .add("Black");

    rgbJoiner.merge(cmybJoiner);

    assertEquals(
      rgbJoiner.toString(), 
      "[Red,Green,Blue,Cyan-Magenta-Yellow-Black]");
}

Обратите внимание, как “-” используется для объединения содержимого cmybJoiner пока rgb Столяр все еще пользуюсь “,”.

5. Потоковый API

Это почти все, что мы можем сделать с StringJoiner .

Есть еще одно косвенное использование, которое можно найти в API Stream :

@Test
public void whenUsedWithinCollectors_thenJoined() {
    List rgbList = Arrays.asList("Red", "Green", "Blue");
    String commaSeparatedRGB = rgbList.stream()
      .map(color -> color.toString())
      .collect(Collectors.joining(","));

    assertEquals(commaSeparatedRGB, "Red,Green,Blue");
}

Коллекционеры.() внутреннее использование Соединитель строк для выполнения операции соединения.

6. Заключение

В этом кратком руководстве мы проиллюстрировали, как использовать класс StringJoiner . В целом StringJoiner кажется очень примитивным и не учитывает некоторые основные случаи использования, такие как объединение элементов списка. Похоже, он в первую очередь предназначен для Коллекционеров .

Если StringJoiner не соответствует вашим требованиям, существуют другие популярные и мощные библиотеки, такие как Guava .

И, как обычно, все источники можно найти на GitHub .