Menjana Strim Primitif
iterate dan generate
Menjana Strim Primitif ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Strim Tidak Terhingga Memerlukan Had
iterate dan generate mencipta strim yang berpotensi tidak terhingga. Anda mesti menambah limit (atau predikat) untuk menjadikannya terhingga.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.iterate(1, n -> n + 1)
.limit(5)
.forEach(System.out::println);
}
}iterate dengan Nilai Awal
iterate(seed, next) bermula dengan nilai awal dan berulang kali menggunakan fungsi itu pada nilai sebelumnya.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.iterate(2, n -> n * 2)
.limit(5)
.forEach(System.out::println);
}
}iterate dengan Predikat
iterate(seed, hasNext, next) dengan tiga argumen berhenti secara automatik apabila predikat bernilai palsu, seperti gelung berasaskan fungsi.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.iterate(1, n -> n <= 100, n -> n * 3)
.forEach(System.out::println);
}
}generate dengan Pembekal
generate menerima IntSupplier yang menghasilkan setiap elemen secara berasingan, tanpa bergantung pada nilai sebelumnya.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.generate(() -> 7)
.limit(3)
.forEach(System.out::println);
}
}Menjana Nombor Rawak
Pembekal bagi generate boleh memanggil sumber rawak. Di sini, setiap elemen ialah hasil lambungan dadu yang berasingan.
import java.util.Random;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
Random rnd = new Random(42);
IntStream.generate(() -> rnd.nextInt(6) + 1)
.limit(5)
.forEach(System.out::println);
}
}iterate berbanding generate
Perbezaan utama:
iterate: setiap nilai diterbitkan daripada nilai sebelumnya (jujukan).generate: setiap nilai dihasilkan secara berasingan (pemalar, nilai rawak).
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sum = IntStream.iterate(1, n -> n + 1).limit(10).sum();
System.out.println(sum);
}
}Mengagregatkan Strim yang Dijana
Selepas dihadkan, strim yang dijana menyokong semua agregat biasa.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
long count = IntStream.iterate(0, n -> n + 2)
.limit(50)
.filter(n -> n % 3 == 0)
.count();
System.out.println(count);
}
}Fibonacci dengan iterate pada Strim Objek
Untuk jujukan berkeadaan seperti Fibonacci, gunakan Stream.iterate pada pasangan tatasusunan, kemudian petakan semula hasilnya kepada integer.
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream.iterate(new int[]{0, 1}, p -> new int[]{p[1], p[0] + p[1]})
.limit(8)
.mapToInt(p -> p[0])
.forEach(System.out::println);
}
}Membina Tatasusunan daripada Penjana
Gabungkan penjana dengan toArray untuk membina tatasusunan primitif secara prosedural.
import java.util.Arrays;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int[] squares = IntStream.iterate(1, n -> n + 1)
.limit(5)
.map(n -> n * n)
.toArray();
System.out.println(Arrays.toString(squares));
}
}Penilaian Malas Menjimatkan Kerja
Strim dinilai secara malas: dengan limit, hanya elemen yang diperlukan dijana, walaupun daripada sumber yang tidak terhingga.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int first = IntStream.iterate(10, n -> n + 10)
.filter(n -> n > 25)
.findFirst()
.getAsInt();
System.out.println(first);
}
}Utamakan Bentuk Predikat
iterate berasaskan predikat sering lebih jelas daripada iterate(...).limit(...) kerana syarat berhenti berada bersama logik penjanaan.
import java.util.stream.LongStream;
public class Main {
public static void main(String[] args) {
long product = LongStream.iterate(1, n -> n <= 5, n -> n + 1)
.reduce(1, (a, b) -> a * b);
System.out.println(product);
}
}Semakan Pantas
Apakah yang berlaku jika Anda memanggil generate tanpa limit, kemudian menggunakan operasi terminal seperti forEach?
Imbas Kembali
Anda telah menjana strim primitif:
iteratemenerbitkan setiap nilai daripada nilai sebelumnya.generatemenghasilkan nilai secara berasingan daripada pembekal.- Kedua-duanya tidak terhingga; hadkan dengan
limitatau bentuk predikat bagiiterate. - Penilaian malas bermaksud hanya elemen yang diperlukan dikira.
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Menjana Strim Primitif” percuma?
Ya — teks penuh “Menjana Strim Primitif” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Menjana Strim Primitif”?
iterate dan generate Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Menjana Strim Primitif” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- IntStream dan LongStream
- Operasi Julat dan Agregat
- Pemetaan kepada dan daripada Strim Objek
- Menjana Strim Primitif