IntStream et LongStream
Évitez l’encapsulation des types primitifs dans les flux
IntStream et LongStream est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
Pourquoi les flux de types primitifs existent
Stream<Integer> encapsule chaque élément dans un objet Integer. IntStream, LongStream et DoubleStream travaillent directement sur les types primitifs afin d’éviter le surcoût de l’encapsulation.
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);
}
}Créer un IntStream
Utilisez IntStream.of pour des valeurs explicites, ou Arrays.stream sur un 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 pour les grands nombres
LongStream fonctionne comme IntStream, mais avec des valeurs long, ce qui évite les dépassements lors de grandes sommes.
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);
}
}Opérations terminales spécialisées
Les flux de types primitifs ajoutent des méthodes numériques absentes des flux d’objets : sum, min, max et 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());
}
}Résultats OptionalInt
min et max renvoient OptionalInt, car le flux peut être vide. Utilisez getAsInt ou 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 reste primitif
map sur un IntStream reçoit un IntUnaryOperator et renvoie un autre IntStream ; aucune encapsulation n’a donc lieu.
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 sur les flux de types primitifs
filter reçoit un IntPredicate et conserve les types primitifs correspondants.
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 sur IntStream
reduce replie le flux au moyen d’un IntBinaryOperator. Avec une valeur d’identité, il renvoie directement un int.
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 sur des types primitifs
forEach reçoit un IntConsumer, ce qui évite à nouveau l’encapsulation.
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));
}
}Collecter dans un tableau
toArray renvoie un int[] primitif, l’équivalent naturel d’un 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));
}
}Convertir entre Int et Long
IntStream.asLongStream élargit les types primitifs en long sans encapsulation.
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);
}
}Vérification rapide
Quelle est la principale raison d’utiliser IntStream plutôt que Stream<Integer> ?
Récapitulatif
Vous avez utilisé des flux de types primitifs pour éviter l’encapsulation :
IntStreametLongStreamcontiennent des types primitifs bruts.- Ils ajoutent des opérations terminales numériques :
sum,min,maxetaverage. minetmaxrenvoientOptionalInt.map,filter,reduceettoArrayrestent tous primitifs.
Questions Fréquemment Posées
La leçon « IntStream et LongStream » est-elle gratuite ?
Oui — le texte complet de « IntStream et LongStream » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « IntStream et LongStream » ?
Évitez l’encapsulation des types primitifs dans les flux Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « IntStream et LongStream » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- IntStream et LongStream
- Opérations de plage et d’agrégation
- Conversion vers et depuis des flux d’objets
- Générer des flux de types primitifs