Question

En jouant avec l'API Streams de Java8, je suis tombé sur ce qui suit :

Pour convertir un tableau d'objets de classe wrapper primitifs en un Stream Je dois juste appeler Stream.of(array).Mais pour convertir un tableau de types de données primitifs, je dois appeler .of(array) de la classe de flux wrapper (class) correspondante (<-- cela semble idiot).

Un exemple:

final Integer[] integers = {1, 2, 3};
final int[]     ints     = {1, 2, 3};


Stream.of(integers).forEach(System.out::println); //That works just fine

Stream.of(ints).forEach(System.out::println);     //That doesn't

IntStream.of(ints).forEach(System.out::println);  //Have to use IntStream instead


Mes questions):Pourquoi est-ce?Est-ce que cela correspond, par ex.le comportement de Arrays.asList() qui fonctionne également uniquement pour les tableaux de classes wrapper ?

Était-ce utile?

La solution

Le framework de flux Java 8 a un générique Stream<T> pour les objets en tant qu'éléments, et trois flux primitifs IntStream, LongStream, DoubleStream pour les trois principales primitives.Si vous travaillez avec des primitives, utilisez-en une, dans votre cas IntStream.

Regarder la photo:

enter image description here

Ce qui se cache derrière c'est que :

  1. Génériques Java ne peut pas fonctionner avec des types primitifs :il est possible d'avoir seulement List<Integer> et Stream<Integer>, mais non List<int> et Stream<int>

  2. Quand le Collections Java framework a été introduit, il a été introduit uniquement pour les classes, donc si vous voulez avoir un List de ints, tu dois les emballer pour Integers.C'est cher !

  3. Quand le Flux Java cadre a été introduit, ils ont décidé de contourner cette surcharge et en parallèle avec les flux "orientés classes" (utilisant le mécanisme générique), ils ont introduit trois ensembles supplémentaires de toutes les fonctions de la bibliothèque, spécifiquement conçus pour les types primitifs les plus importants : int, long, double.

Et voyez aussi une merveilleuse explication ici : https://stackoverflow.com/a/22919112/2886891

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top