Saya melihat dokumen untuk IntStream
, dan saya melihat toArray
metode, tetapi tidak ada cara untuk langsung keList<Integer>
Tentunya ada cara untuk mengkonversi Stream
ke List
?
Saya melihat dokumen untuk IntStream
, dan saya melihat toArray
metode, tetapi tidak ada cara untuk langsung keList<Integer>
Tentunya ada cara untuk mengkonversi Stream
ke List
?
Jawaban:
IntStream::boxed
IntStream::boxed
mengubah suatu IntStream
menjadi Stream<Integer>
, yang kemudian Anda bisa collect
menjadi List
:
theIntStream.boxed().collect(Collectors.toList())
The boxed
Metode mengubah int
nilai-nilai primitif dari IntStream
ke dalam aliran Integer
objek. 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())
.
Collectors
kelas di Preferensi -> Java -> Editor -> Content Assist -> Favorites . Setelah ini, Anda hanya perlu mengetik toLi
di tekan Ctr + Space untuk mengisi IDE toList
dan 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.