Saya mencoba untuk mengubah array int ke Daftar dan saya mengambil rute asing menggunakan Java 8 Stream dan datang dengan ini
Arrays.stream(arr).boxed().collect(Collectors.toList());
Saya masih mengalami kesulitan untuk sepenuhnya memahami kalimat ini, kebanyakan,
Mengapa
Collectors.toList()
dalam hal ini mengembalikan antarmukaArrayList<Integer>
pelaksanaList
? Mengapa tidakLinkedList<Integer>
atau kelas generik lain yang sesuai denganList
antarmuka? Saya tidak dapat menemukan apa pun tentang ini, kecuali untuk penyebutan singkat tentang ArrayList di sini , di bagian Catatan API.Apa artinya panel kiri ? Jelas adalah tipe pengembalian generik ( dalam kode saya di sini). Dan saya pikir argumen tipe generik dari metode ini, tetapi bagaimana mereka ditentukan? Saya melihat ke antarmuka antarmuka Collector dan tidak dapat menyerapnya.
Stream.collect()
R
ArrayList<Integer>
<R, A>
Collectors.toList()
dalam kasus ini mengembalikan sebuah ArrayList<Integer>
" Itu mungkin tidak mengembalikan sebuah ArrayList
. The List
implementasi terdefinisi , sehingga Anda tidak bisa mengandalkan apa implementasi itu kembali. Seperti yang dikatakan javadoc : "Tidak ada jaminan pada jenis , mutabilitas, serializability, atau keamanan thread dari Daftar yang dikembalikan;"
toList()
tidak mengembalikan ArrayList
atau List
- itu mengembalikan Collector
, yang pada akhirnya akan membuat dan mengembalikan List
- juga dokumentasi menyatakan: "... Tidak ada jaminan pada jenis , mutabilitas, serializability, atau keselamatan benang dari Daftar yang dikembalikan; jika kontrol lebih besar atas Daftar yang dikembalikan diperlukan, gunakan toCollection (Pemasok) .... "
R
adalah tipe generik dari tipe yang dihasilkan.A
tipe generik dari tipe akumulasi menengah Kolektor. Itu adalah detail implementasi tentang cara kerja kolektor. Itu membagi dan menaklukkan, juga untuk pemrosesan paralel, mengumpulkan pertama menjadi tipe perantara.