Wie erstelle ich IntStream von SetInteger?

8

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?

    
Steve McLeod 21.08.2015, 10:51
quelle

1 Antwort

8

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:

%Vor%

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%     
Tagir Valeev 21.08.2015, 11:32
quelle

Tags und Links