Cómo convertir una matriz de objetos a una matriz de cadenas en Java

Utilizo el siguiente código para convertir una matriz de Objetos a una matriz de Cadenas:

Object Object_Array[]=new Object[100]; // ... get values in the Object_Array String String_Array[]=new String[Object_Array.length]; for (int i=0;i<String_Array.length;i++) String_Array[i]=Object_Array[i].toString(); 

Pero me pregunto si hay otra forma de hacerlo, algo así como:

 String_Array=(String[])Object_Array; 

Pero esto causaría un error de tiempo de ejecución: Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String; Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

¿Cuál es la forma correcta de hacerlo?

Otra alternativa a System.arraycopy :

 String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class); 

System.arraycopy es probablemente la forma más eficiente, pero para la estética, preferiría:

  Arrays.asList(Object_Array).toArray(new String[Object_Array.length]); 

Veo que se han proporcionado algunas soluciones pero no hay ninguna causa, así que explicaré esto en detalle ya que creo que es tan importante saber qué hizo mal que solo obtener “algo” que funcione a partir de las respuestas dadas.

Primero, veamos lo que Oracle tiene que decir

  * 

The returned array will be "safe" in that no references to it are * maintained by this list. (In other words, this method must * allocate a new array even if this list is backed by an array). * The caller is thus free to modify the returned array.

Puede que no parezca importante, pero como verán es … Entonces, ¿qué falla la siguiente línea? Todos los objetos en la lista son String pero no los convierte, ¿por qué?

 List tList = new ArrayList(); tList.add("4"); tList.add("5"); String tArray[] = (String[]) tList.toArray(); 

Probablemente, muchos de ustedes pensarían que este código está haciendo lo mismo, pero no es así.

 Object tSObjectArray[] = new String[2]; String tStringArray[] = (String[]) tSObjectArray; 

Cuando en realidad el código escrito está haciendo algo como esto. ¡Javadoc lo está diciendo! ¡Instalará una nueva matriz, lo que será de los Objetos!

 Object tSObjectArray[] = new Object[2]; String tStringArray[] = (String[]) tSObjectArray; 

Entonces tList.toArray está creando instancias de Objetos y no de Cadenas …

Por lo tanto, la solución natural que no se ha mencionado en este hilo, pero es lo que Oracle recomienda es la siguiente

 String tArray[] = tList.toArray(new String[0]); 

Espero que sea lo suficientemente claro.

En Java 8:

 String[] strings = Arrays.stream(objects).toArray(String[]::new); 

Para convertir una matriz de otros tipos:

 String[] strings = Arrays.stream(obj).map(Object::toString). toArray(String[]::new); 

El marco de Google Collections ofrece un buen método de transformación, por lo que puede transformar sus objetos en cadenas. El único inconveniente es que tiene que ser de Iterable a Iterable, pero esta es la forma en que lo haría:

 Iterable objects = ....... //Your chosen iterable here Iterable strings = com.google.common.collect.Iterables.transform(objects, new Function(){ String apply(Object from){ return from.toString(); } }); 

Esto te aleja del uso de arreglos, pero creo que esta sería mi manera preferida.

Si desea obtener una representación de Cadena de los objetos en su matriz, entonces sí, no hay otra manera de hacerlo.

Si sabe que su matriz de Objetos contiene solo cadenas, también puede hacerlo (instalar la llamada a String ()):

 for (int i=0;i 

El único caso en el que podría usar el molde para Cadena [] de Object_Array sería si el conjunto al que hace referencia se definiera realmente como String [], por ejemplo, esto funcionaría:

  Object[] o = new String[10]; String[] s = (String[]) o; 

Este es bueno, pero no funciona como lo notaron los mmyers, debido a los corchetes:

Arrays.toString(objectArray).split(",")

Este es feo pero funciona:

Arrays.toString(objectArray).replaceFirst("^\\[", "").replaceFirst("\\]$", "").split(",")

Si usa este código, debe asegurarse de que las cadenas devueltas por sus objetos ‘toString () no contengan comas.

Para tu idea, en realidad te estás acercando al éxito, pero si te gusta esto, debería estar bien:

 for (int i=0;i 

Por cierto, usar el método de utilidad Arrays es bastante bueno y hacer que el código sea elegante.

 Object arr3[]=list1.toArray(); String common[]=new String[arr3.length]; for (int i=0;i 

Puedes usar type-converter . Para convertir una matriz de cualquier tipo en una matriz de cadenas, puede registrar su propio convertidor:

  TypeConverter.registerConverter(Object[].class, String[].class, new Converter() { @Override public String[] convert(Object[] source) { String[] strings = new String[source.length]; for(int i = 0; i < source.length ; i++) { strings[i] = source[i].toString(); } return strings; } }); 

y usarlo

  Object[] objects = new Object[] {1, 23.43, true, "text", 'c'}; String[] strings = TypeConverter.convert(objects, String[].class); 

Cambie fácilmente sin headche Convierta cualquier matriz de objetos a string array Object drivex [] = {1,2};

  for(int i=0; i