Konvertering af array til liste i Java

Hvordan konverterer jeg et array til en liste i Java?

Jeg brugte Arrays.asList(), men opførslen (og signaturen) er på en eller anden måde ændret fra Java SE 1.4.2 (dokumentationen er nu i arkivet) til 8, og de fleste uddrag, jeg har fundet på nettet, bruger 1.4.2-opførslen.

For eksempel:

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
  • på 1.4.2 returnerer en liste med elementerne 1, 2, 3
  • på 1.5.0+ returnerer en liste, der indeholder arrayet spam

I mange tilfælde burde det være let at opdage, men nogle gange kan det smutte ubemærket:

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

I dit eksempel er det fordi du ikke kan have en liste af en primitiv type. Med andre ord, List er ikke muligt.

Du kan dog have en List ved hjælp af klassen Integer, der omslutter den primitive type int. Konverter dit array til en List med hjælpefunktionen Arrays.asList).

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

Se denne kode kørt live på IdeOne.com.

Kommentarer (16)

Problemet er, at varargs blev indført i Java5, og desværre blev Arrays.asList() også overbelastet med en vararg-version. Så Arrays.asList(spam) opfattes af Java5-compileren som en vararg-parameter for int-arrays.

Dette problem er forklaret mere detaljeret i Effective Java 2nd Ed., kapitel 7, punkt 42.

Kommentarer (2)

du skal kaste i til array

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