Saya melihat dokumen untuk IntStream, dan saya melihat toArraymetode, tetapi tidak ada cara untuk langsung keList<Integer>
Tentunya ada cara untuk mengkonversi Streamke List?
Saya melihat dokumen untuk IntStream, dan saya melihat toArraymetode, tetapi tidak ada cara untuk langsung keList<Integer>
Tentunya ada cara untuk mengkonversi Streamke List?
Jawaban:
IntStream::boxedIntStream::boxedmengubah suatu IntStreammenjadi Stream<Integer>, yang kemudian Anda bisa collectmenjadi List:
theIntStream.boxed().collect(Collectors.toList())
The boxedMetode mengubah intnilai-nilai primitif dari IntStreamke dalam aliran Integerobjek. Kata "tinju" menamai proses konversi int⬌ Integer. Lihat Tutorial Oracle .
toList. Hal ini dilakukan dengan menempatkan berikut di antara impor file: static import java.util.stream.Collectors.toList;. Kemudian panggilan kumpulkan hanya berbunyi .collect(toList()).
Collectorskelas di Preferensi -> Java -> Editor -> Content Assist -> Favorites . Setelah ini, Anda hanya perlu mengetik toLidi tekan Ctr + Space untuk mengisi IDE toListdan menambahkan impor statis.
boxed()bagian
Anda juga bisa menggunakan mapToObj () pada Stream, yang mengambil IntFunction dan mengembalikan Stream bernilai objek yang terdiri dari hasil penerapan fungsi yang diberikan ke elemen stream ini.
List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());
boxed()delegasi.
Anda dapat menggunakan koleksi primitif yang tersedia di Eclipse Collections dan menghindari tinju.
MutableIntList list =
IntStream.range(1, 5)
.collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);
Catatan: Saya adalah kontributor untuk Eclipse Collections.
MutableIntList list = IntLists.mutable.withAll(IntStream.range(1, 5))
Anda dapat menggunakan metode kumpulkan:
IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);
Faktanya, ini hampir persis dengan apa yang dilakukan Java ketika Anda memanggil .collect (Collectors.toList ()) pada aliran objek:
public static <T> Collector<T, ?, List<T>> toList() {
return new Collectors.CollectorImpl(ArrayList::new, List::add, (var0, var1) -> {
var0.addAll(var1);
return var0;
}, CH_ID);
}
Catatan: Parameter ketiga hanya diperlukan jika Anda ingin menjalankan pengumpulan paralel; untuk koleksi berurutan menyediakan dua saja sudah cukup.