Conversion vers et depuis des flux d’objets
mapToObj et mapToInt
Conversion vers et depuis des flux d’objets est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 3 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.
Deux univers de flux
Java possède des flux d’objets (Stream<T>) et des flux de types primitifs (IntStream et autres). Les méthodes de mappage permettent de passer des uns aux autres.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
System.out.println(IntStream.rangeClosed(1, 3).sum());
}
}mapToObj : du primitif à l’objet
mapToObj convertit chaque type primitif en objet et produit un Stream<T>.
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
List<String> labels = IntStream.rangeClosed(1, 3)
.mapToObj(n -> "item-" + n)
.collect(Collectors.toList());
System.out.println(labels);
}
}mapToInt : de l’objet au primitif
mapToInt extrait un int de chaque objet et produit un IntStream prêt pour une agrégation numérique.
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> words = List.of("hi", "hello", "hey");
int totalChars = words.stream()
.mapToInt(String::length)
.sum();
System.out.println(totalChars);
}
}boxed : du primitif au flux d’objets enveloppes
boxed transforme un IntStream en Stream<Integer>, ce dont vous avez besoin avant de collecter les éléments dans une List.
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
List<Integer> list = IntStream.rangeClosed(1, 5)
.boxed()
.collect(Collectors.toList());
System.out.println(list);
}
}mapToLong et mapToDouble
Le même principe s’applique aux autres types primitifs : mapToLong et mapToDouble.
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> prices = List.of("9.99", "19.50", "4.25");
double total = prices.stream()
.mapToDouble(Double::parseDouble)
.sum();
System.out.println(total);
}
}Pourquoi mapToInt est préférable à map
Utiliser map sur un flux d’objets le conserve sous forme encapsulée. mapToInt donne accès à des méthodes numériques comme sum et average, tout en évitant l’encapsulation.
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = List.of(10, 20, 30);
double avg = nums.stream()
.mapToInt(Integer::intValue)
.average()
.getAsDouble();
System.out.println(avg);
}
}Aller-retour : de l’objet au type int puis à l’objet
Vous pouvez parcourir les deux directions dans une seule chaîne de traitement : extrayez les nombres, transformez-les, puis reconvertissez-les en objets.
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> words = List.of("a", "bb", "ccc");
List<String> report = words.stream()
.mapToInt(String::length)
.mapToObj(len -> "len=" + len)
.collect(Collectors.toList());
System.out.println(report);
}
}asLongStream et asDoubleStream
Dans les flux de types primitifs, vous pouvez élargir les types : asLongStream et asDoubleStream évitent l’encapsulation tout en modifiant la largeur numérique.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
double avg = IntStream.of(1, 2, 3, 4)
.asDoubleStream()
.average()
.getAsDouble();
System.out.println(avg);
}
}Collecter des résultats primitifs
Pour rassembler des types primitifs dans une collection, appelez d’abord boxed, puis un collecteur.
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
Set<Integer> evens = IntStream.rangeClosed(1, 10)
.filter(n -> n % 2 == 0)
.boxed()
.collect(Collectors.toSet());
System.out.println(evens);
}
}flatMapToInt
flatMapToInt aplatit des objets en un seul IntStream, ce qui est utile lorsque chaque objet fournit plusieurs nombres.
import java.util.List;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
List<int[]> rows = List.of(new int[]{1, 2}, new int[]{3, 4});
int sum = rows.stream()
.flatMapToInt(Arrays::stream)
.sum();
System.out.println(sum);
}
}Choisir le bon mappeur
Choisissez selon la direction :
- Objet vers primitif :
mapToInt,mapToLong,mapToDouble. - Primitif vers objet :
mapToObjouboxed.
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> in = List.of("x", "yy");
String out = in.stream()
.mapToInt(String::length)
.mapToObj(Integer::toString)
.collect(Collectors.joining(","));
System.out.println(out);
}
}Vérification rapide
Quelle méthode transforme un IntStream en Stream<Integer> ?
Récapitulatif
Vous avez effectué des conversions entre flux d’objets et flux de types primitifs :
mapToInt/mapToLong/mapToDoubleconvertissent les objets en types primitifs.mapToObjetboxedconvertissent les types primitifs en objets.flatMapToIntaplatit plusieurs nombres en un seul IntStream.- Le passage aux flux de types primitifs donne accès aux agrégats numériques sans encapsulation.
Questions Fréquemment Posées
La leçon « Conversion vers et depuis des flux d’objets » est-elle gratuite ?
Oui — le texte complet de « Conversion vers et depuis des flux d’objets » 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 « Conversion vers et depuis des flux d’objets » ?
mapToObj et mapToInt 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 3 sur 4.
Combien de temps prend la leçon « Conversion vers et depuis des flux d’objets » ?
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