Ich mache das zur Zeit:
%Vor% Es scheint überflüssig zu sein, den Wert dem Wert zuzuordnen, um Stream<Integer>
in IntStream
zu konvertieren. Gibt es eine Möglichkeit, dies ohne den redundanten Abschnitt mapToInt(...)
zu tun?
Nein, du musst .mapToInt(value -> value)
verwenden oder (sieht besser für mich aus) .mapToInt(Integer::intValue)
. Da Stream
die generische Klasse ist, sollte sie für jeden generischen Stream-Elementtyp funktionieren. Daher ist es nicht möglich, der API in einer typsicheren Weise etwas Einfacheres hinzuzufügen. Stellen Sie sich zum Beispiel vor, dass es asIntStream()
method in Stream
interface gibt. Es würde sicherlich besser aussehen:
Aber nichts würde Sie daran hindern, eine solche Methode beispielsweise für Stream<String>
aufzurufen. Es gibt in Java keine Möglichkeit, die Methode nur für bestimmte generische Parameter aufzurufen. Wenn Sie also versehentlich auf den Stream eines anderen Typs zugreifen, würde das zwar gut kompilieren, aber zu einer Laufzeitausnahmebedingung führen, die in der statisch typisierten Sprache schlecht ist. Wenn Sie jedoch .mapToInt(value -> value)
oder .mapToInt(Integer::intValue)
verwenden, erzwingen Sie die Typprüfung: Sie müssen eine Funktion angeben, die int
zurückgibt, damit stringStream.mapToInt(value -> value)
den Kompilierungsfehler korrekt meldet.
Wenn es Ihnen wirklich wichtig ist, können Sie in Ihrem Projekt eine statische Methode wie folgt erstellen:
%Vor%Und benutze es wie
%Vor%Tags und Links java java-8 java-stream