Come convertire l’elenco in List

Voglio convertire List in List .

Uno dei metodi esistenti sta restituendo List e voglio convertirlo in List . Esiste un modo diretto in Java oltre a iterare e convertire elemento per elemento?

Passa l’ List come parametro al costruttore di un nuovo ArrayList .

 List objectList = new ArrayList(stringList); 

Qualsiasi Collection può essere passata come argomento al costruttore fino a quando il suo tipo estende il tipo di ArrayList , poiché String estende Object . Il costruttore prende una Collection , ma List è una subinterface di Collection , quindi puoi semplicemente usare List .

Ogni raccolta java è solo una raccolta di oggetti che si tratti di una stringa o altro. L’argomento del tipo è solo zucchero. A seconda della situazione, come nel caso di elenchi molto grandi, potresti semplicemente volerlo convertire, ovviamente rischiando di mischiare due diversi tipi di oggetti nella stessa lista.

 List objectList = (List)stringList; 

E metti un @SuppressWarning per sbarazzarsi dei nasties …

Personalmente, anche se entrambe le risposte attualmente migliori sono in un certo senso, non credo che nessuno di loro risolva il problema in modo elegante e riusabile, specialmente se lo si deve fare molto spesso.

Supponiamo che tu abbia qualche vecchio codice / dipendenza legacy che non puoi cambiare in alcun modo (in modo che almeno accetti List come suggerito da @ReverendGonzo nel suo commento . Supponiamo anche che tu debba parlare con questo modulo legacy Un sacco.

Non penso che il casting / copiando tutto il tempo sarebbe sopportabile a lungo termine. Rende il tuo codice vulnerabile a insidiosi bug e difficile da seguire o leggermente (o drasticamente) inefficiente e difficile da leggere.

Per avere un codice di produzione leggibile ed efficiente, è meglio incapsulare la parte sporca in un modulo separato che tratta il cast altrimenti innocuo ma brutto.

 class ProductionCode { public void doJob() { List strings = Arrays.asList("pear", "apple", "peach"); StringMagicUtils.dealWithStrings(strings); } } class StringMagicUtils { @SuppressWarnings("unchecked") public static void dealWithStrings(List strings) { ExternalStringMagic.dealWithStringsAsObjects((List) strings); } } // Legacy - cannot edit this wonderful code below ˇˇ class ExternalStringMagic { public static void dealWithStringsAsObjects(List stringsAsObjects) { // deal with them as they please } } 

Questo è abbastanza inefficiente, ma almeno non devi scrivere molto codice ~

 List stringList = new ArrayList(); List objectList = Arrays.asList(stringList.toArray()); 
 List ofObjects = new ArrayList(ofStrings); 

come in:

 import java.util.*; class C { public static void main( String[] args ) { List s = new ArrayList(); s.add("S"); List o = new ArrayList(s); o.add( new Object() ); System.out.println( o ); } } 

In alternativa puoi provare il metodo addAll , se l’elenco degli oggetti è un elenco esistente.