Jawaban:
Perhatikan bagaimana tanda tangannya berbeda:
generatemengambil 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.
iteratemengambil a seeddan 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.iteratemengembalikan yang dipesanIntStream di sisi lain IntStream.generatemengembalikan 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.
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, ...).