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.


$config[zx-auto] not found$config[zx-overlay] not found