Tukar Array of Primitives ke Senarai

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kami akan menunjukkan cara menukar array primitif ke Senarai objek dari jenis yang sesuai . Biasanya, kami mungkin cuba menggunakan autoboxing di Java. Walau bagaimanapun, seperti yang akan kita lihat di bahagian seterusnya, intuisi kita tentang cara kerja autoboxing sering kali salah.

2. Masalah

Mari kita mulakan dengan definisi masalah. Kami mempunyai susunan primitif ( int [] ), dan kami ingin menukar susunan itu menjadi List ( List ). Percubaan pertama yang intuitif ialah:

int[] input = new int[]{1,2,3,4}; List output = Arrays.asList(input);

Malangnya, ini tidak dapat disusun kerana ketidaksesuaian jenis . Kami mungkin menjangkakan autoboks berfungsi dengan susunan primitif. Namun, kepercayaan naluri ini tidak benar.

Autoboxing hanya berlaku untuk satu elemen (contohnya dari int hingga Integer ). Tidak ada penukaran automatik dari pelbagai jenis primitif ke susunan jenis rujukan kotak mereka (contohnya dari int [] ke Integer [] ).

Mari mula melaksanakan beberapa penyelesaian untuk masalah ini.

3. Pengulangan

Oleh kerana autoboxing berfungsi dengan elemen primitif tunggal, penyelesaian mudah adalah dengan melakukan iterasi pada elemen array dan menambahkannya ke dalam senarai satu persatu :

int[] input = new int[]{1,2,3,4}; List output = new ArrayList(); for (int value : input) { output.add(value); }

Kami telah menyelesaikan masalahnya, tetapi jalan keluarnya cukup jelas. Ini membawa kita ke pelaksanaan seterusnya.

4. Aliran

Sejak Java 8, kita dapat menggunakan Stream API . Kami boleh menyediakan penyelesaian satu baris menggunakan Aliran :

int[] input = new int[]{1,2,3,4}; List output = Arrays.stream(input).boxed().collect(Collectors.toList());

Sebagai alternatif, kita boleh menggunakan IntStream :

int[] input = new int[]{1,2,3,4}; List output = IntStream.of(input).boxed().collect(Collectors.toList());

Ini tentu kelihatan lebih bagus. Seterusnya, kita akan melihat beberapa perpustakaan luaran.

5. Jambu batu

Perpustakaan Jambu batu memberikan penyelesaian masalah ini . Mari mulakan dengan menambahkan kebergantungan Maven:

 com.google.guava guava 29.0-jre bundle 

Kita boleh menggunakan Ints.asList () , dengan kelas utiliti yang serupa untuk jenis primitif lain:

int[] input = new int[]{1,2,3,4}; List output = Ints.asList(input);

6. Apache Commons

Perpustakaan lain adalah Apache Commons Lang. Sekali lagi, mari tambahkan kebergantungan Maven untuk perpustakaan ini:

 org.apache.commons commons-lang3 3.10 

Lebih tepat lagi, kami menggunakan kelas ArrayUtils :

int[] input = new int[]{1,2,3,4}; Integer[] outputBoxed = ArrayUtils.toObject(input); List output = Arrays.asList(outputBoxed);

7. Kesimpulannya

Kami kini mempunyai beberapa pilihan di kotak alat kami untuk menukar array primitif ke Daftar . Seperti yang telah kita lihat, autobox hanya berlaku untuk elemen tunggal. Dalam tutorial ini, kami telah melihat beberapa penyelesaian untuk menerapkan penukaran .

Seperti biasa, kod sumber penuh artikel terdapat di GitHub.