2010-03-18 17 views
41

Vorrei chiedere: come si converte uno Collection in uno List in Java?Converti collezione in lista

+4

Si desidera * dire *? O vuoi davvero * sapere *? :) – BalusC

+0

Sembra che tu non abbia idea su come usare le Collezioni generali in Java. Che ne dici di leggere un tutorial? http://java.sun.com/docs/books/tutorial/collections/intro/index.html – mickthompson

+0

Quindi, stiamo aspettando la tua storia. – Artic

risposta

47

Se è già stata creata un'istanza del sottotipo di elenco (ad es. ArrayList, LinkedList), è possibile utilizzare il metodo addAll.

esempio,

l.addAll(myCollection) 

elencare molti sottotipi possono anche assumere la collezione fonte nella loro costruttore.

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

Vedi l'Collections trail nel Java tutorials.

2

Creare un nuovo elenco e chiamare addAll con la raccolta.

0

è possibile utilizzare uno dei 2 soluzioni .. ma pensare se sia necessario clonare le vostre collezioni, dal momento che entrambe le collezioni conterranno lo stesso oggetto fa riferimento

-3

Collection e List sono interfacce. Si può prendere qualsiasi implementazione dell'interfaccia List: ArrayList LinkedList e proprio cast di nuovo ad un Collection perché è al Top

esempio seguente mostra la fusione da 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

perché -1? spiegare? – Omnipresent

+4

Sospetto che tu sia stato downvoted perché _questo non funzionerà sempre_. Certo, quando la classe di implementazione 'Collection' implementa' List' (ad esempio 'ArrayList',' LinkedList' ...), stai bene. Ma non appena provi a fare qualcosa del tipo 'Mappa myMap = new HashMap (); Lista fromMap = (Lista ) myMap.values ​​(); 'tutto sembra a posto in fase di compilazione - ma quando lo si esegue, si ottiene' java.lang.ClassCastException: java.util.HashMap $ I valori non possono essere convertiti in java. util.List'. –

+1

Questo è solo concettualmente totalmente sbagliato. Non puoi "forzare" una raccolta arbitraria per diventare una lista per casting. –

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

Grazie per Sandeep mettendolo - Ho appena aggiunto un controllo Null per evitare NullPointerException in un'altra istruzione.

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