Stream Tak Terbatas dengan iterate dan generate
Buat stream tak terbatas dengan Stream.iterate dan Stream.generate, lalu gunakan limit atau take-while untuk menghentikannya.
Stream Tak Terbatas dengan iterate dan generate adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Apa Itu Aliran Tak Terbatas?
Aliran Java dapat bersifat tak terbatas — aliran tersebut menghasilkan elemen sesuai permintaan tanpa akhir. Aliran ini harus diakhiri dengan operasi pembatas (limit, takeWhile, findFirst, dan sebagainya) agar tidak berjalan selamanya.
Stream.iterate: Urutan Berbasis Nilai Awal
Stream.iterate(seed, f) menghasilkan aliran tak terbatas dengan menerapkan f berulang kali pada nilai sebelumnya. Elemen pertama adalah nilai awal.
// Infinite even numbers: 0, 2, 4, 6, 8, ...
Stream.iterate(0, n -> n + 2)
.limit(10)
.forEach(System.out::println);iterate dengan Predikat (Java 9+)
Stream.iterate(seed, predicate, f) menambahkan kondisi penghentian — seperti loop-for dengan kondisi. Aliran berhenti ketika predikat bernilai false.
// Equivalent to: for (int i = 1; i <= 100; i *= 2)
Stream.iterate(1, n -> n <= 100, n -> n * 2)
.forEach(System.out::println); // 1 2 4 8 16 32 64Stream.generate: Penghasil Tanpa Keadaan
Stream.generate(Supplier) memanggil pemasok untuk setiap elemen. Pemasok dapat tidak memiliki keadaan (seperti angka acak) atau memiliki keadaan (menggunakan penghitung eksternal).
// Infinite random doubles between 0.0 and 1.0:
Stream.generate(Math::random)
.limit(5)
.forEach(System.out::println);Menghasilkan UUID
Gunakan generate dengan UUID::randomUUID untuk membuat aliran pengenal unik bagi pembuatan ID secara berkelompok.
List<String> ids = Stream.generate(() -> UUID.randomUUID().toString())
.limit(100)
.collect(Collectors.toList());
System.out.println(ids.size()); // 100Fibonacci dengan iterate
Hasilkan bilangan Fibonacci menggunakan keadaan berupa pasangan nilai. iterate dengan dua argumen pada Java 9 membuatnya menjadi lebih elegan.
Stream.iterate(new long[]{0, 1}, p -> new long[]{p[1], p[0]+p[1]})
.limit(10)
.map(p -> p[0])
.forEach(System.out::println); // 0 1 1 2 3 5 8 13 21 34takeWhile dan dropWhile (Java 9+)
takeWhile(predicate) mengambil elemen selama predikat terpenuhi, lalu berhenti. dropWhile melewati elemen hingga predikat tidak terpenuhi, lalu mengambil sisanya.
// takeWhile stops at the first element where predicate is false:
Stream.iterate(1, n -> n + 1)
.takeWhile(n -> n < 10)
.forEach(System.out::println); // 1 2 3 4 5 6 7 8 9Aliran Tak Terbatas untuk Polling Percobaan Ulang
Modelkan loop polling dengan generate: hasilkan hasil pemeriksaan, gunakan takeWhile selama kondisi belum terpenuhi, lalu ambil keberhasilan pertama.
Optional<String> result = Stream.generate(() -> checkJobStatus(jobId))
.takeWhile(status -> status.equals("PENDING"))
.findFirst();
// When job completes, takeWhile stops and findFirst gets "DONE"IntStream.range dan rangeClosed
Untuk urutan bilangan bulat yang terbatas, IntStream.range(start, end) dan rangeClosed(start, end) lebih efisien daripada iterate.
// Sum 1 to 1000:
int sum = IntStream.rangeClosed(1, 1000).sum();
System.out.println(sum); // 500500LongStream.iterate untuk Urutan Long
Gunakan LongStream.iterate untuk urutan long agar terhindar dari biaya tambahan autoboxing pada Stream<Long>.
long sumOfPrimes = LongStream.iterate(2, n -> n + 1)
.filter(n -> isPrime(n))
.limit(1000)
.sum();Aliran Tak Terbatas Dievaluasi secara Malas
Aliran tak terbatas tidak menghitung elemen terlebih dahulu. Setiap elemen hanya dihasilkan ketika diminta oleh operasi terminal. Evaluasi malas inilah yang membuat aliran tak terbatas praktis digunakan.
Pemeriksaan Singkat
Mekanisme penghentian apa yang diperlukan saat bekerja dengan aliran tak terbatas?
Ringkasan
iterate(seed, f) untuk urutan, generate(supplier) untuk menghasilkan elemen yang saling independen. Selalu tambahkan operasi terminal short-circuit (limit, takeWhile, findFirst). Aliran tak terbatas bersifat malas — hanya diwujudkan saat diminta.
Belajar Java dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Stream Tak Terbatas dengan iterate dan generate” gratis?
Ya — teks lengkap “Stream Tak Terbatas dengan iterate dan generate” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Stream Tak Terbatas dengan iterate dan generate”?
Buat stream tak terbatas dengan Stream.iterate dan Stream.generate, lalu gunakan limit atau take-while untuk menghentikannya. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Stream Tak Terbatas dengan iterate dan generate” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- flatMap untuk Koleksi Bersarang
- Stream Paralel: Kinerja dan Jebakan
- Spliterator: Pemisahan untuk Paralelisme
- Stream Tak Terbatas dengan iterate dan generate