Dado que en realidad no es una lista de cadenas, la forma más sencilla es recorrerla y convertir cada elemento en una nueva lista de cadenas usted mismo:
Me gusta cómo se conservan los valores nulos en esta implementación.
4
Si lo usa String.valueOf(object), no tendrá que hacer object != null ? object.toString() : nullnada
user219882
2
@Tomas: agregaría una cadena con valor en "null"lugar del literal null. Depende además de las recompensas comerciales si eso es deseable o no. Para mí, no habría sido aceptable en absoluto, ya que introduce un error potencialmente importante.
BalusC
1
@Tomas: "null"no lo es nullen absoluto. El nulltiene un significado especial en Java. No tiene sentido verse obligado a hacerlo if (item.equals("null"))cuando se verifica eso después.
BalusC
1
@Tomas: de esta manera solo estás derrotando la fuerte naturaleza de escritura de Java. Pero como se dijo, depende de los requisitos comerciales si eso es deseable. Para mí, eso es simplemente inaceptable. Haz lo que quieras y el tiempo te enseñará :)
BalusC
18
¡No es seguro hacer eso!
Imagínese si tuviera:
ArrayList<Object> list =newArrayList<Object>();
list.add(newEmployee("Jonh"));
list.add(newCar("BMW","M3"));
list.add(newChocolate("Twix"));
No tendría sentido convertir la lista de esos Objetos a ningún tipo.
A menos que tengan un Object#toString()método anulado. Sin embargo, la conversión completa de tipos de X a String para otros fines que no sean la presentación humana no tiene mucho sentido.
BalusC
13
Si quieres hacerlo de la manera sucia, prueba esto.
Con Java Generics Toma una lista de X y devuelve una lista de T que extiende o implementa X, ¡Dulce!
// the cast is is actually checked via the method API@SuppressWarnings("unchecked")publicstatic<T extends X, X>ArrayList<T> convertToClazz(ArrayList<X> from,Class<X> inClazz,Class<T> outClazz){ArrayList<T> to =newArrayList<T>();for(X data : from){
to.add((T) data);}return to;}
Respuestas:
Dado que en realidad no es una lista de cadenas, la forma más sencilla es recorrerla y convertir cada elemento en una nueva lista de cadenas usted mismo:
O cuando aún no estás en Java 8:
O cuando aún no estás en Java 7:
Tenga en cuenta que debe declarar contra la interfaz (
java.util.List
en este caso), no la implementación.fuente
String.valueOf(object)
, no tendrá que hacerobject != null ? object.toString() : null
nada"null"
lugar del literalnull
. Depende además de las recompensas comerciales si eso es deseable o no. Para mí, no habría sido aceptable en absoluto, ya que introduce un error potencialmente importante."null"
no lo esnull
en absoluto. Elnull
tiene un significado especial en Java. No tiene sentido verse obligado a hacerloif (item.equals("null"))
cuando se verifica eso después.¡No es seguro hacer eso!
Imagínese si tuviera:
No tendría sentido convertir la lista de esos Objetos a ningún tipo.
fuente
Object#toString()
método anulado. Sin embargo, la conversión completa de tipos de X a String para otros fines que no sean la presentación humana no tiene mucho sentido.Si quieres hacerlo de la manera sucia, prueba esto.
Ventaja: aquí se ahorra tiempo al no iterar sobre todos los objetos.
Desventaja: puede producir un agujero en su pie.
fuente
Usando guayaba :
fuente
Usando Java 8 puedes hacer:
fuente
Puede usar comodines para hacer esto de la siguiente manera
fuente
Aquí hay otra alternativa usando Guayaba
fuente
Su código
ArrayList<String> list2 = (String)list;
no se compila porquelist2
no es de tipoString
. Pero ese no es el único problema.fuente
Usando Java 8 lambda:
fuente
Con Java Generics Toma una lista de X y devuelve una lista de T que extiende o implementa X, ¡Dulce!
fuente
Una solución sencilla:
Nota: esto funciona cuando la lista contiene todos los elementos del tipo de datos String.
fuente