Bagaimana cara mengubah array ke daftar di Jawa?
Saya menggunakan Arrays.asList()
tetapi perilaku (dan tanda tangan) entah bagaimana berubah dari Java SE 1.4.2 (sekarang dalam arsip) ke 8 dan sebagian besar cuplikan yang saya temukan di web menggunakan perilaku 1.4.2.
Sebagai contoh:
int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
- pada 1.4.2 mengembalikan daftar yang berisi elemen 1, 2, 3
- pada 1.5.0+ mengembalikan daftar yang berisi spam array
Dalam banyak kasus seharusnya mudah untuk dideteksi, tetapi kadang-kadang bisa tidak diketahui:
Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);
java
arrays
list
data-conversion
Alexandru
sumber
sumber
Arrays.asList(new int[] { 1, 2, 3 })
:; pasti tidak mengkompilasi di Jawa 1.4.2, karena seorangint[]
yang tidak seorangObject[]
.Arrays.asList
bekerja.Jawaban:
Dalam contoh Anda, itu karena Anda tidak dapat memiliki Daftar tipe primitif. Dengan kata lain,
List<int>
itu tidak mungkin.Namun, Anda dapat
List<Integer>
menggunakanInteger
kelas yang membungkusint
primitif. Konversi array Anda menjadiList
denganArrays.asList
metode utilitas.Lihat kode ini berjalan langsung di IdeOne.com .
sumber
List<Integer[]>
?Integer[] integerArray1 = { 1 }; Integer[] integerArray2 = { 2 }; List<Integer[]> integerArrays = Arrays.asList(integerArray1, integerArray2);
Di Java 8, Anda dapat menggunakan stream:
sumber
boolean[]
. Saya kira itu karena mudah membuatnyaBoolean[]
. Itu mungkin solusi yang lebih baik. Bagaimanapun, ini adalah kekhasan yang menarik.Berbicara tentang cara konversi, itu tergantung pada mengapa Anda memerlukannya
List
. Jika Anda membutuhkannya hanya untuk membaca data. Oke, ini dia:Tetapi jika Anda melakukan sesuatu seperti ini:
kamu dapatkan
java.lang.UnsupportedOperationException
. Jadi untuk beberapa kasus Anda bahkan memerlukan ini:Pendekatan pertama sebenarnya tidak mengubah array tetapi 'mewakili' seperti
List
. Tetapi array berada di bawah tenda dengan semua propertinya seperti jumlah elemen yang tetap. Harap perhatikan bahwa Anda perlu menentukan tipe saat membuatArrayList
.sumber
Masalahnya adalah bahwa
Arrays.asList()
vararg diperkenalkan di Java5 dan sayangnya, kelebihan beban dengan versi vararg juga. JadiArrays.asList(spam)
dipahami oleh kompiler Java5 sebagai parameter vararg dari array int.Masalah ini dijelaskan secara lebih terperinci dalam Effective Java 2nd Ed., Bab 7, Item 42.
sumber
Tampaknya sedikit terlambat tetapi ini adalah dua sen saya. Kita tidak dapat memiliki
List<int>
sebagaiint
adalah tipe primitif sehingga kita hanya dapat memilikiList<Integer>
.Java 8 (int array)
Java 8 dan yang lebih baru (array Integer)
Perlu ArrayList dan bukan Daftar?
Jika kita menginginkan implementasi spesifik dari
List
egArrayList
maka kita dapat menggunakantoCollection
sebagai:Mengapa
list21
tidak dapat dimodifikasi secara struktural?Ketika kita menggunakan
Arrays.asList
ukuran daftar yang dikembalikan adalah tetap karena daftar yang dikembalikan bukanjava.util.ArrayList
, tetapi kelas statis pribadi yang didefinisikan di dalamnyajava.util.Arrays
. Jadi jika kita menambah atau menghapus elemen dari daftar yang dikembalikan, sebuahUnsupportedOperationException
akan dilempar. Jadi kita harus pergilist22
ketika kita ingin mengubah daftar. Jika kita memiliki Java8 maka kita juga bisa menggunakannyalist23
.Agar jelas
list21
dapat dimodifikasi dalam arti bahwa kita dapat memanggillist21.set(index,element)
tetapi daftar ini mungkin tidak dimodifikasi secara struktural yaitu tidak dapat menambah atau menghapus elemen dari daftar. Anda juga dapat memeriksa pertanyaan ini .Jika kita menginginkan daftar yang tidak dapat diubah maka kita dapat membungkusnya sebagai:
Hal lain yang perlu diperhatikan adalah bahwa metode ini
Collections.unmodifiableList
mengembalikan tampilan daftar yang ditentukan yang tidak dapat dimodifikasi. Koleksi tampilan yang tidak dapat dimodifikasi adalah koleksi yang tidak dapat dimodifikasi dan juga merupakan tampilan ke koleksi dukungan. Perhatikan bahwa perubahan pada koleksi dukungan mungkin masih dimungkinkan, dan jika terjadi, mereka dapat dilihat melalui tampilan yang tidak dapat dimodifikasi.Kita dapat memiliki daftar yang benar-benar abadi di Jawa 9 dan 10.
Daftar yang benar-benar tidak dapat berubah
Java 9:
Java 10 (Daftar Benar-Benar Tidak Berubah) dalam dua cara:
List.copyOf(Arrays.asList(integers))
Arrays.stream(integers).collect(Collectors.toUnmodifiableList());
Periksa juga jawaban saya ini untuk informasi lebih lanjut.
sumber
List::add
&List::remove
gagal dengan daftar dikembalikan olehArrays.asList
. JavaDoc untuk metode itu ditulis dengan buruk dan tidak jelas dalam hal ini. Pada bacaan ketiga saya, saya kira kalimat "ukuran tetap" di sana dimaksudkan untuk mengatakan seseorang tidak dapat menambah atau menghapus elemen.Bahkan lebih pendek:
sumber
Baru-baru ini saya harus mengubah array ke Daftar. Kemudian program menyaring daftar yang berusaha menghapus data. Saat Anda menggunakan fungsi Arrays.asList (array), Anda membuat koleksi ukuran tetap: Anda tidak bisa menambah atau menghapus. Entri ini menjelaskan masalah lebih baik daripada yang saya bisa: Mengapa saya mendapatkan UnsupportedOperationException ketika mencoba menghapus elemen dari Daftar? .
Pada akhirnya, saya harus melakukan konversi "manual":
Saya kira saya bisa menambahkan konversi dari array ke daftar menggunakan operasi List.addAll (item).
sumber
new ArrayList<ListItem>(Arrays.asList(itemsArray))
akan samaCollections.addAll(items, itemsArray)
saja.Menggunakan Array
Ini adalah cara paling sederhana untuk mengonversi array menjadi
List
. Namun, jika Anda mencoba menambahkan elemen baru atau menghapus elemen yang ada dari daftar, sebuahUnsupportedOperationException
akan dilempar.Menggunakan ArrayList atau Implementasi Daftar Lainnya
Anda bisa menggunakan
for
loop untuk menambahkan semua elemen array ke dalamList
implementasi, misalnyaArrayList
:Menggunakan Stream API di Java 8
Anda bisa mengubah array menjadi stream, lalu kumpulkan stream menggunakan kolektor berbeda: Kolektor default di Java 8 menggunakan di
ArrayList
belakang layar, tetapi Anda juga bisa memaksakan implementasi yang Anda inginkan.Lihat juga:
sumber
Solusi lain jika Anda menggunakan apache commons-lang:
Di mana ArrayUtils.toObject dikonversi
int[]
menjadiInteger[]
sumber
Anda harus memasukkan ke dalam array
sumber
Satu-liner:
sumber
Di Java 9 Anda memiliki solusi yang lebih elegan menggunakan daftar abadi melalui metode pabrik kenyamanan baru
List.of
:(Tanpa malu-malu disalin dari sini )
sumber
Jika Anda menargetkan Java 8 (atau lebih baru), Anda dapat mencoba ini:
CATATAN:
Perhatikan
Collectors.<Integer>toList()
, metode umum ini membantu Anda menghindari kesalahan "Ketik ketidakcocokan: tidak dapat dikonversi dariList<Object>
keList<Integer>
".sumber
Menggunakan jambu biji:
Menggunakan Koleksi Apache Commons:
sumber
Jika ini membantu: Saya memiliki masalah yang sama dan hanya menulis fungsi generik yang mengambil array dan mengembalikan ArrayList dari tipe yang sama dengan konten yang sama:
sumber
Array yang Diberikan:
Mengubah array integer ke Daftar Integer
Satu cara: boxed () -> mengembalikan IntStream
Cara Kedua: memetakan setiap elemen aliran ke Integer dan kemudian mengumpulkan
CATATAN: Menggunakan mapToObj, Anda dapat menyamarkan setiap elemen int ke dalam string stream, char stream, dll dengan casing i to (char) i
Mengubah Satu Jenis Array ke Jenis Lain Contoh:
sumber
Jadi itu tergantung pada versi Java yang Anda coba-
Java 7
ATAU
ATAU
Di Jawa 8
Referensi - http://www.codingeek.com/java/how-to-convert-array-to-list-in-java/
sumber
Bisakah Anda meningkatkan jawaban ini karena ini adalah apa yang saya gunakan tetapi saya tidak 100% jelas. Ini berfungsi dengan baik tetapi intelliJ menambahkan WeatherStation baru [0]. Mengapa 0?
sumber
menggunakan dua baris kode untuk mengkonversi array ke daftar jika Anda menggunakannya dalam nilai integer Anda harus menggunakan tipe autoboxing untuk tipe data primitif
sumber