Tampaknya IntStream.iterate
ini hanya versi ringan yang dipesan untuk IntStream.generate
. Apakah itu benar Jika tidak, apa perbedaan intinya?
sumber
Tampaknya IntStream.iterate
ini hanya versi ringan yang dipesan untuk IntStream.generate
. Apakah itu benar Jika tidak, apa perbedaan intinya?
Perhatikan bagaimana tanda tangannya berbeda:
generate
mengambil IntSupplier
, yang berarti bahwa Anda seharusnya menghasilkan int tanpa diberi apa pun. Contoh penggunaan termasuk membuat aliran konstan dari bilangan bulat yang sama, membuat aliran bilangan bulat acak. Perhatikan bagaimana setiap elemen dalam aliran tidak bergantung pada elemen sebelumnya.
iterate
mengambil a seed
dan a IntUnaryOperator
, yang berarti bahwa Anda diharapkan untuk menghasilkan setiap elemen berdasarkan elemen sebelumnya . Ini berguna untuk membuat urutan yang didefinisikan secara induktif, misalnya. Dalam hal ini, setiap elemen seharusnya bergantung pada yang sebelumnya .
IntStream.iterate
mengembalikan yang dipesanIntStream
di sisi lainIntStream.generate
mengembalikan yang tidak berurutanIntStream
yang dapat membantu mempercepat pipa aliran paralel.IntStream.generate
lebih disukai untuk menghasilkan nilai acak atau konstan seperti yang ditentukan dalam Javadoc, saya kira kemungkinan besar untuk karakteristik aliran dikembalikan.sumber
Selain pesanan, penggunaannya juga agak berbeda. Mari kita lihat tanda tangan metode:
iterate(int seed, IntUnaryOperator f)
generate(IntSupplier s)
Iterate secara eksplisit telah memberikan nilai awal sebagai parameter dan operator unary yang digunakan untuk menghasilkan nilai berikutnya dari sebelumnya. Di sini operator dapat dengan mudah berubah tanpa kondisi internal dan dapat digunakan kembali di banyak tempat secara paralel tanpa masalah.
Hasilkan menggunakan pemasok. Mereka dapat memberikan angka konstan atau acak atau perlu memiliki keadaan internal untuk menyediakan seri seperti (1, 2, 3, ...).
sumber