Ubah Array of Primitives menjadi List

1. Ikhtisar

Dalam tutorial singkat ini, kami akan menunjukkan cara mengonversi array primitif menjadi Daftar objek dari tipe yang sesuai . Biasanya, kami mungkin mencoba menggunakan autoboxing di Java. Namun, seperti yang akan kita lihat di bagian selanjutnya, intuisi kita tentang cara kerja autoboxing seringkali salah.

2. Masalah

Mari kita mulai dengan definisi masalah. Kami memiliki array primitif ( int [] ), dan kami ingin mengubah array itu menjadi List ( List ). Upaya pertama yang intuitif bisa berupa:

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

Sayangnya, ini tidak dapat dikompilasi karena ketidakcocokan tipe . Kami mungkin mengharapkan autoboxing bekerja dengan array primitif. Namun, keyakinan naluriah ini tidak benar.

Autoboxing hanya terjadi untuk satu elemen (misalnya dari int ke Integer ). Tidak ada konversi otomatis dari larik tipe primitif ke larik tipe referensi kotak mereka (misalnya dari int [] ke Integer [] ).

Mari mulai menerapkan beberapa solusi untuk masalah ini.

3. Iterasi

Karena autoboxing bekerja dengan elemen primitif tunggal, solusi sederhananya adalah dengan mengulang elemen array dan menambahkannya ke Daftar satu per satu :

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

Kami telah menyelesaikan masalah, tetapi solusinya cukup bertele-tele. Ini membawa kita ke implementasi berikutnya.

4. Aliran

Sejak Java 8, kita bisa menggunakan Stream API . Kami dapat memberikan solusi satu baris menggunakan Stream :

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

Alternatifnya, kita bisa menggunakan IntStream :

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

Ini pasti terlihat jauh lebih bagus. Selanjutnya, kita akan melihat beberapa pustaka eksternal.

5. Jambu biji

Pustaka Guava menyediakan solusi untuk mengatasi masalah ini . Mari kita mulai dengan menambahkan ketergantungan Maven:

 com.google.guava guava 29.0-jre bundle 

Kita bisa menggunakan Ints.asList () , dengan kelas utilitas serupa untuk tipe primitif lainnya:

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 dependensi Maven untuk library ini:

 org.apache.commons commons-lang3 3.10 

Lebih tepatnya, kami menggunakan kelas ArrayUtils :

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

7. Kesimpulan

Kami sekarang memiliki beberapa opsi di kotak alat kami untuk mengonversi larik primitif menjadi Daftar . Seperti yang telah kita lihat, autoboxing hanya terjadi untuk elemen tunggal. Dalam tutorial ini, kami telah melihat beberapa solusi untuk menerapkan konversi .

Seperti biasa, kode sumber lengkap artikel tersedia di GitHub.