Apa cara termudah / terpendek untuk mengubah Java 8 Stream
menjadi sebuah array?
java
arrays
java-8
java-stream
MC Emperor
sumber
sumber
Jawaban:
Metode termudah adalah menggunakan
toArray(IntFunction<A[]> generator)
metode dengan referensi konstruktor array. Ini disarankan dalam dokumentasi API untuk metode ini .Apa yang dilakukannya adalah menemukan metode yang menggunakan integer (ukuran) sebagai argumen, dan mengembalikan a
String[]
, yang persis seperti apa (salah satu kelebihan beban)new String[]
tidak.Anda juga bisa menulis sendiri
IntFunction
:Tujuannya
IntFunction<A[]> generator
adalah untuk mengkonversi bilangan bulat, ukuran array, ke array baru.Kode contoh:
Cetakan:
sumber
toArray(sz -> new String[sz])
jadi saya tidak yakin bahwa seseorang dapat benar-benar mengatakan apa solusi yang seharusnya atau harus dilakukan.sz -> new String[sz]
membuat fungsi baru sedangkan referensi konstruktor tidak. Itu tergantung berapa banyak Anda menghargai Pengumpulan Sampah Churn kurasa.private
metode baru , yang tidak dapat menyebabkan churn, dan kedua versi perlu membuat objek baru. Referensi membuat objek yang menunjuk langsung ke metode target; sebuah lambda membuat objek yang menunjuk ke objek yang dihasilkanprivate
. Referensi ke konstruktor harus tetap berkinerja lebih baik karena kurangnya tipuan dan optimisasi VM yang lebih mudah, tetapi mengaduk tidak ada hubungannya dengan itu.Jika Anda ingin mendapatkan array int, dengan bentuk nilai 1 hingga 10, dari Stream, ada IntStream yang Anda inginkan.
Di sini kita membuat Stream dengan metode Stream.of dan mengonversi Stream ke IntStream menggunakan mapToInt. Lalu kita bisa memanggil metode toArray IntStream.
Ini adalah hal yang sama, tanpa Stream, hanya menggunakan IntStream
sumber
Anda dapat mengonversi aliran java 8 ke array menggunakan blok kode sederhana ini:
Tapi mari kita jelaskan lebih banyak, pertama, mari kita buat daftar string yang diisi dengan tiga nilai:
Buat aliran dari Array yang diberikan:
kita sekarang dapat melakukan beberapa operasi pada aliran ini, Ex:
dan akhirnya mengubahnya menjadi java 8 Array menggunakan metode ini:
Metode 1-Klasik (Antarmuka fungsional)
2 -Lambda ekspresi
3- Referensi metode
Referensi metode Penjelasan:
Ini adalah cara lain untuk menulis ekspresi lambda yang sangat setara dengan yang lain.
sumber
Konversi teks ke array string tempat memisahkan setiap nilai dengan koma, dan potong setiap bidang, misalnya:
sumber
Anda dapat membuat kolektor khusus yang mengonversi aliran ke array.
dan penggunaan cepat
sumber
Collectors.groupingBy
sehingga saya bisa memetakan beberapa atribut ke array objek per nilai atribut. Jawaban ini memberi saya persis seperti itu. Juga @Dierier.Menggunakan
toArray(IntFunction<A[]> generator)
metode ini memang cara yang sangat elegan dan aman untuk mengonversi (atau lebih tepatnya, mengumpulkan) Stream menjadi array dengan tipe Stream yang sama.Namun, jika jenis array yang dikembalikan tidak penting, cukup menggunakan
toArray()
metode ini lebih mudah dan lebih pendek. Sebagai contoh:sumber
sumber
Cobalah secara online: https://repl.it/@SmaMa/Stream-to-array
sumber
sumber
Anda dapat melakukannya dalam beberapa cara. Semua cara secara teknis sama tetapi menggunakan Lambda akan menyederhanakan beberapa kode. Katakanlah kita menginisialisasi Daftar terlebih dahulu dengan String, sebut saja orang.
Sekarang Anda dapat menggunakan salah satu dari cara berikut.
Menggunakan Lambda Expresiion untuk membuat StringArray baru dengan ukuran yang ditentukan.
String [] stringArray = stream.toArray (size-> new String [size]);
Menggunakan referensi metode secara langsung.
String [] stringArray = stream.toArray (String [] :: new);
sumber