2010-03-18 35 views
41

Me gustaría preguntar: ¿cómo se convierte un Collection a un List en Java?Convertir la colección a la lista

+4

Quieres * nombrar *? ¿O realmente quieres * saber *? :) – BalusC

+0

Parece que no tienes idea de cómo usar colecciones generales en Java. ¿Qué tal leer un tutorial? http://java.sun.com/docs/books/tutorial/collections/intro/index.html – mickthompson

+0

Entonces, estamos esperando su historia. – Artic

Respuesta

47

Si ya ha creado una instancia de su subtipo List (por ejemplo, ArrayList, LinkedList), puede usar el método addAll.

por ejemplo,

l.addAll(myCollection) 

muchos subtipos lista también puede tomar la colección de origen en su constructor.

55
Collection<MyObjectType> myCollection = ...; 
List<MyObjectType> list = new ArrayList<MyObjectType>(myCollection); 

Véase el Collections trail en el Java tutorials.

2

Haz una nueva lista y llama al addAll con la Colección.

0

puede utilizar cualquiera de las 2 soluciones .. pero pensar si es necesario clonar sus colecciones, ya que tanto las colecciones contendrán el mismo objeto hace referencia a

-3

Collection y List son interfaces. Usted puede tomar cualquier implementación de la interfaz List: ArrayList LinkedList y simplemente echarlo hacia atrás a una Collection porque es en la parte superior

siguiente ejemplo muestra la fundición de ArrayList

public static void main (String args[]) { 
    Collection c = getCollection(); 
    List myList = (ArrayList) c; 
} 

public static Collection getCollection() 
{ 
    Collection c = new ArrayList(); 
    c.add("Apple"); 
    c.add("Oranges"); 
    return c; 
} 
+1

¿por qué? ¿explique? – Omnipresent

+4

Sospecho que has votado negativamente porque esto no siempre funcionará. Claro, cuando la clase implementadora de 'Collection' implementa' List' (por ejemplo 'ArrayList',' LinkedList' ...), estás bien. Pero tan pronto como intente hacer algo como 'Map myMap = new HashMap (); List fromMap = (List ) myMap.values ​​(); 'todo se ve bien en el tiempo de compilación, pero cuando lo ejecuta, obtiene' java.lang.ClassCastException: java.util.HashMap $ Los valores no se pueden convertir a java. util.List'. –

+1

Esto es conceptualmente totalmente erróneo. No se puede "forzar" una Colección arbitraria para convertirse en una Lista mediante conversión. –

5
List list; 
if (collection instanceof List) 
{ 
    list = (List)collection; 
} 
else 
{ 
    list = new ArrayList(collection); 
} 
1

Gracias por Sandeep poniéndolo - Acabo de agregar una verificación nula para evitar NullPointerException en la declaración else.

if(collection==null){ 
    return Collections.emptyList(); 
} 
List list; 
if (collection instanceof List){ 
    list = (List)collection; 
}else{ 
    list = new ArrayList(collection); 
} 
Cuestiones relacionadas