Conversione di array in elenco in Java

Come si converte un array in una lista in Java?

Ho usato il Arrays.asList() ma il comportamento (e la firma) in qualche modo è cambiato da Java SE 1.4.2 (docs ora in archivio) a 8 e la maggior parte degli snippet che ho trovato sul web usano il comportamento 1.4.2.

Per esempio:

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
  • su 1.4.2 restituisce una lista contenente gli elementi 1, 2, 3
  • su 1.5.0+ restituisce una lista contenente l'array spam

In molti casi dovrebbe essere facile da rilevare, ma a volte può passare inosservato:

Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);
Soluzione

Nel tuo esempio, è perché non puoi avere una Lista di un tipo primitivo. In altre parole, Listnon è possibile.

Puoi però avere una List usando la classe Integer che avvolge la primitiva int. Converti il tuo array in una List con il metodo di utilità Arrays.asList.

Integer[] spam = new Integer[] { 1, 2, 3 };
List list = Arrays.asList(spam);

Vedi questo codice eseguito dal vivo su IdeOne.com.

Commentari (16)

Il problema è che i varargs sono stati introdotti in Java5 e sfortunatamente, Arrays.asList() è stato sovraccaricato anche con una versione vararg. Così Arrays.asList(spam) è compreso dal compilatore Java5 come un parametro vararg di array int.

Questo problema è spiegato più dettagliatamente in Effective Java 2nd Ed., capitolo 7, punto 42.

Commentari (2)

dovete lanciare in un array

Arrays.asList((Object[]) array)
Commentari (2)