Primitieve streams genereren
iterate en generate
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:
iterateleidt elke waarde af van de vorige.generateproduceert waarden onafhankelijk via een leverancier.- Beide zijn oneindig; begrens ze met
limitof met de predicaatvorm vaniterate. - Door luiheid worden alleen de benodigde elementen berekend.
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
- IntStream en LongStream
- Bereik- en aggregatiebewerkingen
- Naar en van Object-streams mappen
- Primitieve streams genereren