Convertendo array para lista em Java

Como posso converter um array para uma lista em Java?

Eu utilizei o Arrays.asList() mas o comportamento (e assinatura) de alguma forma mudou de Java SE 1.4.2 (docs agora em arquivo) para 8 e a maioria dos snippets que encontrei na web utilizam o comportamento 1.4.2.

Por exemplo:

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
  • em 1.4.2 retorna uma lista contendo os elementos 1, 2, 3
  • em 1.5.0+ retorna uma lista contendo o array de spam

Em muitos casos deve ser fácil de detectar, mas às vezes pode passar despercebido:

Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);
Solução

No seu exemplo, é porque você não pode ter uma Lista de um tipo primitivo. Em outras palavras, Lista não é possível.

Você pode, no entanto, ter uma Lista utilizando a classe Integer que envolve o int primitivo. Converta seu array para um método List com o método Arrays.asList`].

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

Veja isto código executado ao vivo no IdeOne.com.

Comentários (16)

O problema é que o varargs foi introduzido no Java5 e infelizmente, Arrays.asList() ficou sobrecarregado com uma versão vararg também. Então Arrays.asList(spam) é entendido pelo compilador Java5 como um parâmetro vararg de arrays int.

Este problema é explicado em mais detalhes em Effective Java 2nd Ed., Capítulo 7, Item 42.

Comentários (2)

você tem que se organizar

Arrays.asList((Object[]) array)
Comentários (2)