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 .