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() { ListrgbList = 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() { ListrgbList = 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 .