Pretvori niz primitiva u popis
1. Pregled
U ovom kratkom vodiču, pokazat ćemo kako pretvoriti niz primitiva u Popis objekata odgovarajućeg tipa. Tipično bismo mogli pokušati koristiti automatsko boksanje na Javi. Međutim, kao što ćemo vidjeti u sljedećem odjeljku, naša intuicija kako funkcionira autoboksiranje često može biti pogrešna.
2. Problem
Počnimo s definicijom problema. Imamo niz primitivaca (int []), i želimo pretvoriti taj niz u Popis (Popis). Intuitivni prvi pokušaj mogao bi biti:
int [] ulaz = novi int [] {1,2,3,4}; Izlaz popisa = Arrays.asList (input);
Nažalost, ovo neće se kompajlirati zbog nekompatibilnosti tipa. Mogli bismo očekivati da će autoboksiranje raditi s nizovima primitiva. Međutim, ovo instinktivno uvjerenje nije istina.
Automatsko kutiranje događa se samo za jedan element (na primjer iz int do Cijeli broj). Ne postoji automatska pretvorba iz niza primitivnih tipova u niz njihovih uokvirenih referentnih tipova (na primjer iz int [] do Cijeli broj []).
Počnimo provoditi nekoliko rješenja za ovaj problem.
3. Ponavljanje
Budući da autoboksiranje radi s jednim primitivnim elementima, jednostavno je rješenje samo prelistati elemente niza i dodati ih u Popis jedan po jedan:
int [] ulaz = novi int [] {1,2,3,4}; Popis izlaza = novi ArrayList (); for (int value: input) {output.add (value); }
Riješili smo problem, ali rješenje je prilično opširno. To nas dovodi do sljedeće provedbe.
4. Potoci
Od Jave 8 možemo koristiti Stream API. Možemo pružiti rješenje u jednom retku pomoću a Stream:
int [] ulaz = novi int [] {1,2,3,4}; Izlaz s popisa = Nizovi.stream (ulaz) .boxed (). Collect (Collectors.toList ());
Ili bismo mogli koristiti IntStream:
int [] ulaz = novi int [] {1,2,3,4}; Izlaz s popisa = IntStream.of (input) .boxed (). Collect (Collectors.toList ());
Ovo sigurno izgleda puno ljepše. Dalje ćemo pogledati nekoliko vanjskih knjižnica.
5. Guava
Knjižnica Guava nudi omot oko ovog problema. Počnimo s dodavanjem ovisnosti Maven:
com.google.guava svežanj guava 29,0-jre
Možemo koristiti Ints.asList (), sa sličnim klasama korisnosti za ostale primitivne tipove:
int [] ulaz = novi int [] {1,2,3,4}; Popis izlaz = Ints.asList (input);
6. Apache Commons
Druga knjižnica je Apache Commons Lang. Ponovno, dodajmo ovisnost Mavena za ovu knjižnicu:
org.apache.commons commons-lang3 3.10
Točnije, koristimo ArrayUtils razred:
int [] ulaz = novi int [] {1,2,3,4}; Cijeli broj [] outputBoxed = ArrayUtils.toObject (ulaz); Popis izlaz = Arrays.asList (outputBoxed);
7. Zaključak
U našem alatu sada imamo nekoliko mogućnosti za pretvaranje niza primitiva u Popis. Kao što smo vidjeli, automatsko kutiranje događa se samo za pojedinačne elemente. U ovom uputstvu vidjeli smo nekoliko rješenja za primjenu pretvorbe.
Kao i uvijek, puni izvorni kôd članka dostupan je na GitHub-u.