Преобразование массива объектов в строковой в Java
Быстрый и простой способ
Если вам нужно преобразовать массив объектов в массив строк в Java, воспользуйтесь методом Arrays.stream()
, который в сочетании с методом map()
применяет функцию toString()
к каждому элементу. Завершить преобразование и получить нужный массив строк позволяет метод toArray()
:
Object[] objArray = { "Java", 42, false };
String[] strArray = Arrays.stream(objArray)
.map(String::valueOf)
.toArray(String[]::new);
Обработка null
Если в массиве присутствует значение null, и вы хотите избежать исключения NullPointerException
при вызове toString()
, используйте Objects.toString()
, указывая альтернативное значение для null:
String[] strArray = Arrays.stream(objArray)
.map(o -> Objects.toString(o, "null"))
.toArray(String[]::new);
Для избежания проблем с приведением типов
Если вы точно знаете, что все объекты в массиве являются строками, но хотите игнорировать ClassCastException
, воспользуйтесь методом Arrays.copyOf()
:
String[] strArray = Arrays.copyOf(objArray, objArray.length, String[].class);
Когда недостаточно toString()
Если стандартный метод toString()
не обеспечивает требуемый формат вывода, особенно для пользовательских классов, можно определить собственную функцию преобразования:
String[] strArray = Arrays.stream(objArray)
.map(e -> e instanceof YourCustomClass ? ((YourCustomClass)e).customToString() : e.toString())
.toArray(String[]::new);
Преобразование с использованием потоков
Вы можете преобразовать объекты в строки, используя потоки и методы map()
и toArray()
:
String[] sorcererTools = Arrays.stream(muggleTools)
.map(Object::toString)
.toArray(String[]::new);
Высокопроизводительное копирование массивов с помощью System.arraycopy
Для операций копирования массивов с высокой производительностью используйте метод System.arraycopy()
:
String[] strArray = new String[objArray.length];
System.arraycopy(objArray, 0, strArray, 0, objArray.length);
Сочетание Arrays.asList и toArray
Сочетания методов Arrays.asList()
и toArray()
иногда могут быть предпочтительнее за счет простоты и изящества, даже при немного меньшей скорости:
String[] strArray = Arrays.asList(objArray).toArray(new String[0]);
Обработка исключительных ситуаций
Важно быть готовым к неожиданностям, чтобы ничто не могло помешать вашему процессу:
String[] strArray = Arrays.stream(objArray)
.map(e -> e instanceof YourCustomClass ? ((YourCustomClass)e).customToString() : Objects.toString(e, "null"))
.toArray(String[]::new);
Улучшение представления массива
Избавьте строковое представление массива от скобок и запятых, воспользовавшись методами Arrays.toString()
, replaceAll()
или split()
:
String strRepresentation = Arrays.toString(objArray);
String cleanString = strRepresentation.replaceAll("[\\[\\]]", "").replace(", ", "-");
Полезные материалы
- [Как преобразовать ArrayList<String> в String[]](https://stackoverflow.com/questions/4042434/converting-arrayliststring-to-string-in-java)
- Официальная документация по работе с массивами в Java SE 8
- Полное руководство по использованию Java 8 Stream API
- Разбор метода Arrays.toString() в контексте Java SE 7.
- Изучите возможности класса Collectors
- Учебник по приведению типов в Java.
- Курс по объектно-ориентированному программированию в Java.