Преобразование массива объектов в строковой в Java

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый и простой способ

Если вам нужно преобразовать массив объектов в массив строк в Java, воспользуйтесь методом Arrays.stream(), который в сочетании с методом map() применяет функцию toString() к каждому элементу. Завершить преобразование и получить нужный массив строк позволяет метод toArray():

Java
Скопировать код
Object[] objArray = { "Java", 42, false };
String[] strArray = Arrays.stream(objArray)
                          .map(String::valueOf)
                          .toArray(String[]::new);
Кинга Идем в IT: пошаговый план для смены профессии

Обработка null

Если в массиве присутствует значение null, и вы хотите избежать исключения NullPointerException при вызове toString(), используйте Objects.toString(), указывая альтернативное значение для null:

Java
Скопировать код
String[] strArray = Arrays.stream(objArray)
                          .map(o -> Objects.toString(o, "null"))
                          .toArray(String[]::new);

Для избежания проблем с приведением типов

Если вы точно знаете, что все объекты в массиве являются строками, но хотите игнорировать ClassCastException, воспользуйтесь методом Arrays.copyOf():

Java
Скопировать код
String[] strArray = Arrays.copyOf(objArray, objArray.length, String[].class);

Когда недостаточно toString()

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

Java
Скопировать код
String[] strArray = Arrays.stream(objArray)
                          .map(e -> e instanceof YourCustomClass ? ((YourCustomClass)e).customToString() : e.toString())
                          .toArray(String[]::new);

Преобразование с использованием потоков

Вы можете преобразовать объекты в строки, используя потоки и методы map() и toArray():

Java
Скопировать код
String[] sorcererTools = Arrays.stream(muggleTools)
                               .map(Object::toString)
                               .toArray(String[]::new);

Высокопроизводительное копирование массивов с помощью System.arraycopy

Для операций копирования массивов с высокой производительностью используйте метод System.arraycopy():

Java
Скопировать код
String[] strArray = new String[objArray.length];
System.arraycopy(objArray, 0, strArray, 0, objArray.length);

Сочетание Arrays.asList и toArray

Сочетания методов Arrays.asList() и toArray() иногда могут быть предпочтительнее за счет простоты и изящества, даже при немного меньшей скорости:

Java
Скопировать код
String[] strArray = Arrays.asList(objArray).toArray(new String[0]);

Обработка исключительных ситуаций

Важно быть готовым к неожиданностям, чтобы ничто не могло помешать вашему процессу:

Java
Скопировать код
String[] strArray = Arrays.stream(objArray)
                          .map(e -> e instanceof YourCustomClass ? ((YourCustomClass)e).customToString() : Objects.toString(e, "null"))
                          .toArray(String[]::new);

Улучшение представления массива

Избавьте строковое представление массива от скобок и запятых, воспользовавшись методами Arrays.toString(), replaceAll() или split():

Java
Скопировать код
String strRepresentation = Arrays.toString(objArray);
String cleanString = strRepresentation.replaceAll("[\\[\\]]", "").replace(", ", "-");

Полезные материалы

  1. [Как преобразовать ArrayList<String> в String[]](https://stackoverflow.com/questions/4042434/converting-arrayliststring-to-string-in-java)
  2. Официальная документация по работе с массивами в Java SE 8
  3. Полное руководство по использованию Java 8 Stream API
  4. Разбор метода Arrays.toString() в контексте Java SE 7.
  5. Изучите возможности класса Collectors
  6. Учебник по приведению типов в Java.
  7. Курс по объектно-ориентированному программированию в Java.