Anda bisa membuat metode pembantu yang akan mengubah daftar (larik) tipe T
menjadi daftar (larik) jenis U
menggunakan map
operasi pada stream
.
//for lists
public static <T, U> List<U> convertList(List<T> from, Function<T, U> func) {
return from.stream().map(func).collect(Collectors.toList());
}
//for arrays
public static <T, U> U[] convertArray(T[] from,
Function<T, U> func,
IntFunction<U[]> generator) {
return Arrays.stream(from).map(func).toArray(generator);
}
Dan gunakan seperti ini:
//for lists
List<String> stringList = Arrays.asList("1","2","3");
List<Integer> integerList = convertList(stringList, s -> Integer.parseInt(s));
//for arrays
String[] stringArr = {"1","2","3"};
Double[] doubleArr = convertArray(stringArr, Double::parseDouble, Double[]::new);
Catatan yang
s -> Integer.parseInt(s)
bisa diganti dengan
Integer::parseInt
(lihat
Referensi metode )
Lists.transform()
.sumber
Metode helper dari jawaban yang diterima tidak diperlukan. Aliran dapat digunakan dengan lambda atau biasanya disingkat menggunakan Referensi Metode . Aliran memungkinkan operasi fungsional.
map()
mengonversi elemen dancollect(...)
atautoArray()
membungkus aliran kembali menjadi larik atau koleksi.Pembicaraan (video) Venkat Subramaniam menjelaskannya lebih baik dari saya.
1 Konversi
List<String>
keList<Integer>
2 Ubah
List<String>
menjadiint[]
3 Konversi
String[]
menjadiList<Integer>
4 Konversi
String[]
menjadiint[]
5 Konversi
String[]
menjadiList<Double>
6 (bonus) Konversi
int[]
keString[]
Lebih banyak variasi yang dimungkinkan tentunya.
Lihat juga versi Ideone dari contoh ini . Bisa klik garpu lalu jalankan untuk dijalankan di browser.
sumber
EDIT: Seperti yang ditunjukkan di komentar, ini adalah versi yang jauh lebih sederhana:
Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray()
Dengan cara ini kita dapat melewati seluruh konversi ke dan dari daftar.Saya menemukan solusi satu baris lain, tetapi masih cukup lambat (memakan waktu sekitar 100 kali lebih lama dari siklus untuk - diuji pada array 6000 0)
Apa fungsinya:
sumber
Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray()
Untuk Daftar:
Untuk Array:
sumber
Anda juga bisa menggunakan,
sumber
Saya tidak menemukannya di jawaban sebelumnya, jadi, dengan Java 8 dan aliran:
Ubah
String[]
menjadiInteger[]
:sumber
Selain itu - kontrol ketika array string tidak memiliki elemen:
sumber
Saya menggunakan maptoInt () dengan operasi Lambda untuk mengubah string menjadi Integer
sumber
Arrays.toString (int []) bekerja untuk saya.
sumber