Pretvarjanje polja v seznam v Javi

Kako v Javi pretvorim polje v seznam?

Uporabil sem Arrays.asList(), vendar se je obnašanje (in podpis) nekako spremenilo od Java SE 1.4.2 (dokumenti so zdaj v arhivu) do 8 in večina fragmentov, ki sem jih našel na spletu, uporablja obnašanje iz 1.4.2.

Na primer:

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
  • na 1.4.2 vrne seznam, ki vsebuje elemente 1, 2, 3
  • v različici 1.5.0+ vrne seznam, ki vsebuje polje spam

V mnogih primerih bi ga bilo mogoče zlahka odkriti, vendar se včasih lahko izmuzne neopaženo:

Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);
Rešitev

V vašem primeru zato, ker ne morete imeti seznama primitivne vrste. Z drugimi besedami, List ni mogoč.

Lahko pa imate List z uporabo razreda Integer, ki vsebuje primitivni tip int. Svoje polje pretvorite v List z uporabno metodo Arrays.asList.

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

Oglejte si to kodo, ki je bila v živo izvedena na IdeOne.com.

Komentarji (16)

Težava je v tem, da so bili varargs uvedeni v Javi5 in na žalost je bil tudi Arrays.asList() preobremenjen z različico vararg. Tako prevajalnik Java5 razume Arrays.asList(spam) kot parameter vararg za polja int.

Ta težava je podrobneje razložena v knjigi Effective Java 2nd Ed., poglavje 7, točka 42.

Komentarji (2)

morate oddati v polje

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