Перейти к основному содержимому

Преобразование списка в строку в Java

· 2 мин. чтения

Задача: Наибольшая подстрока палиндром

Для заданной строки s, верните наибольшую подстроку палиндром входящую в s. Подстрока — это непрерывная непустая последовательность символов внутри строки. Стока является палиндромом, если она читается одинаково в обоих направлениях...

ANDROMEDA 42

1. Введение

В этом кратком руководстве мы объясним, как преобразовать список элементов в строку . Это может быть полезно в определенных сценариях, например, при выводе содержимого на консоль в удобочитаемой форме для проверки/отладки.

2. Стандартная функция toString() в списке

Один из самых простых способов — вызвать метод toString() для списка :

@Test
public void whenListToString_thenPrintDefault() {
List<Integer> intLIst = Arrays.asList(1, 2, 3);

System.out.println(intLIst);
}

Выход:

[1, 2, 3]

Этот метод внутренне использует метод toString() типа элементов в List . В нашем случае мы используем тип Integer , который имеет правильную реализацию метода toString() .

Если мы используем наш собственный тип, такой как Person , нам нужно убедиться, что класс Person переопределяет метод toString() и не полагается на реализацию по умолчанию. Если мы неправильно реализуем метод toString() , мы можем получить неожиданные результаты:

[org.foreach.java.lists.ListToSTring$Person@1edf1c96,
org.foreach.java.lists.ListToSTring$Person@368102c8,
org.foreach.java.lists.ListToSTring$Person@6996db8]

3. Пользовательская реализация с использованием коллекторов

Часто нам может понадобиться отобразить вывод в другом формате.

По сравнению с предыдущим примером заменим запятую (,) дефисом (-), а квадратные скобки ([, ]) набором фигурных скобок ({, }):

@Test
public void whenCollectorsJoining_thenPrintCustom() {
List<Integer> intList = Arrays.asList(1, 2, 3);
String result = intList.stream()
.map(n -> String.valueOf(n))
.collect(Collectors.joining("-", "{", "}"));

System.out.println(result);
}

Выход:

{1-2-3}

Для метода Collectors.joining() требуется CharSequence , поэтому нам нужно сопоставить Integer со String . Мы можем использовать эту же идею с другими классами, даже если у нас нет доступа к коду класса.

4. Использование внешней библиотеки

Теперь мы будем использовать класс StringUtils Apache Commons для достижения аналогичных результатов.

4.1. Зависимость от Maven

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>

Последнюю версию зависимости можно найти здесь .

4.2. Реализация

Реализация представляет собой буквально один вызов метода:

@Test
public void whenStringUtilsJoin_thenPrintCustom() {
List<Integer> intList = Arrays.asList(1, 2, 3);

System.out.println(StringUtils.join(intList, "|"));
}

Выход:

1|2|3

Опять же, эта реализация внутренне зависит от реализации toString() рассматриваемого нами типа.

5. Вывод

В этой статье мы узнали, как легко преобразовать список в строку , используя различные методы.

Как всегда, полный исходный код этой статьи можно найти на GitHub .