我有以下代码
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功能集笨拙。
答案 0 :(得分:7)
这与"声明lambda的返回类型无关。"您只需为map()
指定一个无效参数,编译器就会告诉您。
map
中的IntStream
方法需要IntUnaryOperator
(int
到int
的函数)。没有方法Math.sqrt
可以转换为此签名。