IntStream en LongStream
Boxing in streams vermijden
IntStream en LongStream is een gratis Java Academy-les op CoddyKit. Dit is les 1 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.
Waarom primitieve streams bestaan
Stream<Integer> verpakt elk element in een Integer-object. IntStream, LongStream en DoubleStream werken met onbewerkte primitieve waarden om de overhead van boxing te vermijden.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sum = IntStream.of(1, 2, 3, 4).sum();
System.out.println(sum);
}
}Een IntStream maken
Gebruik IntStream.of voor expliciete waarden of Arrays.stream op een int[].
import java.util.Arrays;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int[] data = {10, 20, 30};
IntStream s = Arrays.stream(data);
System.out.println(s.max().getAsInt());
}
}LongStream voor grote getallen
LongStream werkt net als IntStream, maar met long-waarden, zodat overloop bij grote sommen wordt voorkomen.
import java.util.stream.LongStream;
public class Main {
public static void main(String[] args) {
long total = LongStream.of(1_000_000_000L, 2_000_000_000L).sum();
System.out.println(total);
}
}Gespecialiseerde terminale bewerkingen
Primitieve streams voegen numerieke methoden toe die objectstreams niet hebben: sum, min, max en average.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream nums = IntStream.of(4, 8, 15, 16, 23, 42);
System.out.println(nums.average().getAsDouble());
}
}Resultaten van het type OptionalInt
min en max geven OptionalInt terug omdat de stream leeg kan zijn. Gebruik getAsInt of orElse.
import java.util.OptionalInt;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
OptionalInt result = IntStream.empty().max();
System.out.println(result.orElse(-1));
}
}map blijft primitief
map op een IntStream neemt een IntUnaryOperator aan en geeft een andere IntStream terug, dus er vindt geen boxing plaats.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sumOfSquares = IntStream.of(1, 2, 3)
.map(n -> n * n)
.sum();
System.out.println(sumOfSquares);
}
}filter op primitieve streams
filter neemt een IntPredicate aan en behoudt overeenkomende primitieve waarden.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
long evens = IntStream.of(1, 2, 3, 4, 5, 6)
.filter(n -> n % 2 == 0)
.count();
System.out.println(evens);
}
}reduce op IntStream
reduce vouwt de stream samen met behulp van een IntBinaryOperator. Met een identiteitswaarde geeft het rechtstreeks een int terug.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int product = IntStream.rangeClosed(1, 5)
.reduce(1, (a, b) -> a * b);
System.out.println(product);
}
}forEach voor primitieven
forEach neemt een IntConsumer aan en vermijdt opnieuw boxing.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.of(7, 8, 9).forEach(n -> System.out.println(n));
}
}Naar een array verzamelen
toArray geeft een primitieve int[] terug, de natuurlijke tegenhanger van een IntStream.
import java.util.Arrays;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int[] doubled = IntStream.of(1, 2, 3).map(n -> n * 2).toArray();
System.out.println(Arrays.toString(doubled));
}
}Tussen Int en Long converteren
IntStream.asLongStream verbreedt primitieve waarden naar long zonder boxing.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
long sum = IntStream.of(1, 2, 3).asLongStream().sum();
System.out.println(sum);
}
}Korte controle
Wat is de belangrijkste reden om IntStream te gebruiken in plaats van Stream<Integer>?
Samenvatting
Je gebruikte primitieve streams om boxing over te slaan:
IntStreamenLongStreambevatten onbewerkte primitieve waarden.- Ze voegen numerieke terminale bewerkingen toe:
sum,min,maxenaverage. minenmaxgevenOptionalIntterug.map,filter,reduceentoArrayblijven allemaal primitief.
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 “IntStream en LongStream” gratis?
Ja — de volledige tekst van “IntStream en LongStream” 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 “IntStream en LongStream”?
Boxing in streams vermijden 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 1 van 4.
Hoe lang duurt de les “IntStream en LongStream”?
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