Java Academy · Pelajaran

Menjana Strim Primitif

iterate dan generate

Pelajaran 4 daripada 413 langkah

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:

  • iterate menerbitkan setiap nilai daripada nilai sebelumnya.
  • generate menghasilkan nilai secara berasingan daripada pembekal.
  • Kedua-duanya tidak terhingga; hadkan dengan limit atau bentuk predikat bagi iterate.
  • Penilaian malas bermaksud hanya elemen yang diperlukan dikira.
Percuma untuk bermula

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

  1. IntStream dan LongStream
  2. Operasi Julat dan Agregat
  3. Pemetaan kepada dan daripada Strim Objek
  4. Menjana Strim Primitif
← Kembali ke Java Academy