可以在java 8中定义lambda表达式的返回类型吗?

时间:2017-04-10 21:48:03

标签: lambda java-8

我有以下代码

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功能集笨拙。

1 个答案:

答案 0 :(得分:7)

这与"声明lambda的返回类型无关。"您只需为map()指定一个无效参数,编译器就会告诉您。

map中的IntStream方法需要IntUnaryOperatorintint的函数)。没有方法Math.sqrt可以转换为此签名。