我有以下代码
Random rnd = new Random();
rnd.ints().limit(100)
.filter(i-> i > 0)
.map(Math::sqrt)
.forEach(System.out::println)
这将会产生以下编译错误:
Streams.java:12: error: incompatible types: bad return type in method reference
.map(Math::sqrt)
^
double cannot be converted to int
如果我使用以下内容
.mapToDouble(Math::sqrt)
它可以工作。问题在于编译器无法推断map中使用的lambda表达式的返回类型。有没有一种明确指定它的方法?我个人认为mapToxxx
函数组有些笨拙。
IntStream
是Stream
的子类,但实际上不是(它是BaseStream
的子类),因此map
方法的签名是不同的,正如您所指出的那样。 - pablochacin