lambda - 可以定义 lambda 表达式的返回类型吗?

标签 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函数集笨拙。

最佳答案

这与“声明 lambda 的返回类型”无关。您只是为 map() 指定了一个无效参数,编译器告诉你。
map IntStream 中的方法需要一个 IntUnaryOperator (从 intint 的函数)。没有方法Math.sqrt可以转换为这个签名。

关于lambda - 可以定义 lambda 表达式的返回类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43333414/

相关文章:

c++ - 将 lambda 中捕获的 const 值用作模板参数是否合法?

Java 8 flatMap + Optional.of 不编译

macos - 如何使用新的 lambda 功能在 OS X Mountain Lion 上安装 JDK 8

rpois 在 R 中生成具有大均值 (lambda) 的 NA

c# - 按多个字段订购列表 (C#)?

java - 我应该始终使用 Lambda 表达式进行异常测试吗?

java - 如何使用返回我自己的 List 实现的流收集到 List?

java - 这是在java8中使用嵌套groupby的正确方法吗?

java - 使用 lambda 保护线程安全

java - VSCode 和 WSL2 - 将 Java 语言级别指定为 1.8