Ich habe den folgenden CodeEs ist möglich, den Rückgabetyp eines Lambda-Ausdrucks in Java 8 zu definieren?
Random rnd = new Random();
rnd.ints().limit(100)
.filter(i-> i > 0)
.map(Math::sqrt)
.forEach(System.out::println)
, das die folgenden Compiler-Fehler erzeugt:
Streams.java:12: error: incompatible types: bad return type in method reference
.map(Math::sqrt)
^
double cannot be converted to int
Wenn ich stattdessen
.mapToDouble(Math::sqrt)
Es funktioniert. Das Problem besteht darin, dass der Compiler den Rückgabetyp des in Map verwendeten Lambda-Ausdrucks nicht ableiten kann. Gibt es eine Möglichkeit, es explizit anzugeben? Ich persönlich finde den MapToxxx-Funktionsumfang ungeschickt.
Wahrscheinlich verwandt mit http://stackoverflow.com/questions/24421140/is-maptodouble-really-necessary-for-summing-a-listdouble-with-java-8-streams –
Ouch. Typ Löschung schlägt wieder ... –
Yeap, Sie beide richtig, und das war meine Angst. – pablochacin