Konwersja tablicy na listę w Javie

Jak przekonwertować tablicę na listę w Javie?

Użyłem Arrays.asList(), ale zachowanie (i podpis) jakoś się zmieniło z Java SE 1.4.2 (docs teraz w archiwum) do 8 i większość snippetów, które znalazłem w sieci używa zachowania 1.4.2.

Na przykład:

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
  • w wersji 1.4.2 zwraca listę zawierającą elementy 1, 2, 3
  • w wersji 1.5.0+ zwraca listę zawierającą tablicę spam

W wielu przypadkach powinno to być łatwe do wykrycia, ale czasami może się wymknąć niezauważone:

Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);
Rozwiązanie

W twoim przykładzie jest to spowodowane tym, że nie możesz'mieć Listy typu prymitywnego. Innymi słowy, List nie jest możliwe.

Możesz jednak mieć List używając klasy Integer, która opakowuje prymityw int. Przekształć swoją tablicę na List za pomocą metody Arrays.asList.

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

Zobacz to kod uruchomiony na żywo na IdeOne.com.

Komentarze (16)

Problem polega na tym, że varargs zostały wprowadzone w Java5 i niestety, Arrays.asList() został przeciążony z wersją vararg również. Tak więc Arrays.asList(spam) jest rozumiany przez kompilator Java5 jako parametr vararg tablic int.

Ten problem jest wyjaśniony bardziej szczegółowo w Effective Java 2nd Ed., rozdział 7, pozycja 42.

Komentarze (2)

musisz wrzucić do tablicy

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