dans Cette question a déjà répondu que Les deux expressions sont égales, mais dans ce cas, ils produisent des résultats différents. Pour un int [] indique code>, pourquoi cela fonctionne-t-il:
Arrays.asList(scores).stream()
.forEach(System.out::println);
3 Réponses :
Le comportement que vous voyez n'est pas spécifique au flux code> code> s.
si vous changez Arrays.Aslist (Scores) Code> Renvoie A
Liste
int [] code>, depuis un paramètre de type générique ne peut pas être remplacé par un type primitif. Par conséquent, lorsque vous appelez
aslist (t ... a) code>, le compilateur utilise
int [] code> à la place de
t code>. p>
scores code> sur
entier [] code>, vous obtiendrez la sortie que vous attendez (c.-à-d.
Arrays.Aslist (scores) code> Renvoie une liste
Je vois. C'est juste étrange parce que je me souviens de moi faire des choses comme ça dans le passé et cela a fonctionné. Aurait-il fonctionné si j'avais déclaré la liste d'avance comme ceci: Liste
@Adhominem qui ne fonctionnerait pas, car vous ne pouvez pas transmettre un tableau à un constructeur code>. Vous ne pouvez transmettre qu'une collection.
Comme une note latérale, stream.of (scores) .foreseach (System.out :: println); code> fait la même chose que
alysé.aSlist (scores) ..). Foreach (système .out :: println); code> ...
La raison pour laquelle la deuxième extrait de code ne fonctionne pas est qu'il n'y a pas de liste commutation de En fait, l'efficacité est la raison derrière avoir des surcharges du flux code> code> pour les matrices primitives. Votre appel
arranges.aSlist (scores) code> ne produit pas ce que vous attendez. P>
int [] code> sur
integer [] code> résoudrait ce problème, en ce sens que les deux pièces de code produiraient des résultats identiques. Cependant, votre code serait moins efficace, car tous les
int code> S soient en boîte. P>
arranges.stream (scores) code> est acheminé vers
flux (int [] tableau) code>, produisant
intestream code> objet. Maintenant, vous pouvez appliquer
.forache (system.out :: println) code>, qui appelle
println (int) code>, évitant à nouveau la boxe. P>
Priez pour le projet Valhalla alors: D
@ java8.being: Depuis la rédaction d'un wrapper Liste code> pour un
int [] code> est d'environ dix lignes de code et pour la diffusion en continu,
arrangé.stream (scores) < / Code> travaille déjà, je ne vois pas le point de prier pour quelque chose pour lequel nous ne savons même pas quoi et comment cela changera de ce problème ...
@Holger je voulais dire pour cette ligne: La raison pour laquelle la deuxième extrait de code ne fonctionne pas est qu'il n'y a pas de liste
@ java8.being: Si le projet Valhalla parvient à modifier cela, il n'y aura aucune différence réelle entre une liste list
<@nonnull INTEGER> code> et
et
Arrays.Aslist Code> continuera de faire ce qu'il fait aujourd'hui, pour des raisons de compatibilité ...
arranges.Aslist strong> s'attend à ce que des tableaux d'objet ne sont pas des matrices de primitives forts>.
Il ne se plaint pas de compiler l'heure, car les matrices de primitive sont un objet. Il peut prendre un objet comme la liste, mais ce qui est à l'intérieur de cet objet fort> (matrice de primitif est un objet) ne peut pas être converti en liste. p> Les tableaux de primitif peuvent être convertis en flux en utilisant
J'aime ce p> intestream code>,
doubletrestream code> et
langetream code> p>
double[] doubleArray = {1.1,1.2,1.3};
DoubleStream.of(doubleArray).forEach(System.out::println);
int[] intArray = {1,2,3,4,5,6};
IntStream.of(intArray).forEach(System.out::println);
long[] longArray = {1L,2L,3L};
LongStream.of(longArray).forEach(System.out::println);
Quel est le problème avec ma réponse? Tout le moins vous devriez commenter.
Il aide bien sûr comment l'int [] peut être converti en flux.
beaucoup mieux maintenant +1