¿Cómo puedo convertir ArrayList en ArrayList ?

ArrayList list = new ArrayList(); list.add(1); list.add("Java"); list.add(3.14); System.out.println(list.toString()); 

Lo intenté:

 ArrayList list2 = (String)list; 

Pero me dio un error de comstackción.

Como en realidad no es una lista de cadenas, la forma más fácil es recorrerlo y convertir cada elemento en una nueva lista de cadenas usted mismo:

 List strings = list.stream() .map(object -> Objects.toString(object, null)) .collect(Collectors.toList()); 

O cuando aún no estás en Java 8:

 List strings = new ArrayList<>(list.size()); for (Object object : list) { strings.add(Objects.toString(object, null)); } 

O cuando aún no estás en Java 7:

 List strings = new ArrayList<>(list.size()); for (Object object : list) { strings.add(object != null ? object.toString() : null); } 

Tenga en cuenta que debe declarar en contra de la interfaz ( java.util.List en este caso), no la implementación.

¡No es seguro hacer eso!
Imagina si tuvieras:

 ArrayList list = new ArrayList(); list.add(new Employee("Jonh")); list.add(new Car("BMW","M3")); list.add(new Chocolate("Twix")); 

No tendría sentido convertir la lista de esos Objetos a ningún tipo.

Usando guayaba :

 List stringList=Lists.transform(list,new Function(){ @Override public String apply(Object arg0) { if(arg0!=null) return arg0.toString(); else return "null"; } }); 

Si quieres hacerlo de la manera sucia, prueba esto.

 @SuppressWarnings("unchecked") public ArrayList convert(ArrayList a) { return (ArrayList) a; } 

Ventaja: aquí ahorras tiempo al no iterar sobre todos los objetos.

Desventaja: puede producir un hoyo en su pie.

Usando Java 8 puedes hacer:

 List list = ...; List strList = list.stream() .map( Object::toString ) .collect( Collectors.toList() ); 

Puede usar comodines para hacer esto de la siguiente manera

 ArrayList strList = (ArrayList)(ArrayList)(list); 

Su código ArrayList list2 = (String)list; no comstack porque list2 no es de tipo String . Pero ese no es el único problema.

Aquí hay otra alternativa usando guayaba

 List lst ... List ls = Lists.transform(lst, Functions.toStringFunction()); 

Usando Java 8 lambda:

 ArrayList obj = new ArrayList<>(); obj.add(1); obj.add("Java"); obj.add(3.14); ArrayList list = new ArrayList<>(); obj.forEach((xx) -> list.add(String.valueOf(xx))); 

Con Java Generics Toma una lista de X y devuelve una lista de T que amplía o implementa X, Sweet!

  // the cast is is actually checked via the method API @SuppressWarnings("unchecked") public static  ArrayList convertToClazz(ArrayList from, Class inClazz, Class outClazz) { ArrayList to = new ArrayList(); for (X data : from) { to.add((T) data); } return to; }