Java Academy · Pelajaran

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.

Pelajaran 4 dari 413 langkah

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 64

Stream.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()); // 100

Fibonacci 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 34

takeWhile 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 9

Aliran 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); // 500500

LongStream.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.

Gratis untuk memulai

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

  1. flatMap untuk Koleksi Bersarang
  2. Stream Paralel: Kinerja dan Jebakan
  3. Spliterator: Pemisahan untuk Paralelisme
  4. Stream Tak Terbatas dengan iterate dan generate
← Kembali ke Java Academy