Java Academy · Les

Primitieve streams genereren

iterate en generate

Les 4 van 413 stappen

Primitieve streams genereren is een gratis Java Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.

Oneindige streams hebben limieten nodig

iterate en generate maken mogelijk oneindige streams. Je moet limit (of een predicaat) toevoegen om ze eindig te maken.

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 met een startwaarde

iterate(seed, next) begint bij de startwaarde en past de functie steeds toe op de vorige waarde.

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 met een predicaat

De drieargumentenvariant iterate(seed, hasNext, next) stopt automatisch wanneer het predicaat onwaar is, net als een functionele for-lus.

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 met een leverancier

generate gebruikt een IntSupplier die elk element onafhankelijk produceert, zonder afhankelijkheid van de vorige waarde.

import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        IntStream.generate(() -> 7)
            .limit(3)
            .forEach(System.out::println);
    }
}

Willekeurige getallen genereren

Een generate-leverancier kan een bron van willekeurige waarden aanroepen. Hier is elk element een onafhankelijke worp met een dobbelsteen.

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 versus generate

Belangrijkste verschil:

  • iterate: elke waarde wordt afgeleid van de vorige (reeksen).
  • generate: elke waarde wordt onafhankelijk geproduceerd (constanten, willekeurige waarden).
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);
    }
}

Gegenereerde streams aggregeren

Zodra je ze begrenst, ondersteunen gegenereerde streams alle normale aggregaties.

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 met iterate op een objectstream

Gebruik voor toestandsafhankelijke reeksen zoals Fibonacci Stream.iterate over een arraypaar en zet de waarden daarna weer om naar int.

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);
    }
}

Een array opbouwen met een generator

Combineer een generator met toArray om procedureel een array met primitieve waarden op te bouwen.

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));
    }
}

Luiheid bespaart werk

Streams zijn lui: met limit worden zelfs vanuit een oneindige bron alleen de benodigde elementen gegenereerd.

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);
    }
}

Geef de voorkeur aan de predicaatvorm

De op een predicaat gebaseerde vorm van iterate is vaak duidelijker dan iterate(...).limit(...), omdat de stopvoorwaarde bij de generatielogica staat.

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);
    }
}

Korte controle

Wat gebeurt er als je generate zonder limit aanroept en daarna een terminale bewerking zoals forEach uitvoert?

Samenvatting

Je hebt streams met primitieve waarden gegenereerd:

  • iterate leidt elke waarde af van de vorige.
  • generate produceert waarden onafhankelijk via een leverancier.
  • Beide zijn oneindig; begrens ze met limit of met de predicaatvorm van iterate.
  • Door luiheid worden alleen de benodigde elementen berekend.
Gratis beginnen

Leer Java met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
104
Lessen
374

Veelgestelde vragen

Is de les “Primitieve streams genereren” gratis?

Ja — de volledige tekst van “Primitieve streams genereren” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.

Wat leer ik in “Primitieve streams genereren”?

iterate en generate Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Java Academy te beginnen?

Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Primitieve streams genereren”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Java Academy?

Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. IntStream en LongStream
  2. Bereik- en aggregatiebewerkingen
  3. Naar en van Object-streams mappen
  4. Primitieve streams genereren
← Terug naar Java Academy