Konvertering av array till lista i Java

Hur konverterar jag en array till en lista i Java?

Jag använde Arrays.asList() men beteendet (och signaturen) har på något sätt ändrats från Java SE 1.4.2 (dokumentationen finns nu i arkivet) till 8 och de flesta utdrag jag hittat på webben använder beteendet från 1.4.2.

Till exempel:

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
  • på 1.4.2 returnerar en lista som innehåller elementen 1, 2, 3
  • på 1.5.0+ returnerar en lista som innehåller matrisen spam

I många fall borde det vara lätt att upptäcka, men ibland kan det smita obemärkt:

Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);
Lösning

I ditt exempel beror det på att du inte kan ha en lista av en primitiv typ. Med andra ord är List inte möjligt.

Du kan dock ha en List med hjälp av klassen Integer som omsluter den primitiva typen int. Konvertera din array till en List med hjälp av verktygsmetoden Arrays.asList.

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

Se den här kod som körs live på IdeOne.com.

Kommentarer (16)

Problemet är att varargs infördes i Java5 och tyvärr blev även Arrays.asList() överbelastad med en vararg-version. Så Arrays.asList(spam) tolkas av Java5-kompilatorn som en vararg-parameter för int-arrays.

Det här problemet förklaras närmare i Effective Java 2nd Ed., kapitel 7, punkt 42.

Kommentarer (2)

du måste kasta in i en matris

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