java - lambda 表达式如何映射到函数式接口(interface)?

标签 java lambda functional-programming java-8 java-stream

让我们看下面的代码。

    List<String> names = Arrays.asList("Adam", "Brian", "Supun");
    List<Integer> lengths = names.stream()
                                 .map(name -> name.length())
                                 .collect(Collectors.toList());

然后将查看 javadoc对于 streams.map .有 map 的签名方法看起来像这样。

<R> Stream<R> map(Function<? super T,? extends R> mapper)

有人可以解释 JVM 如何根据 name -> name.length() 映射我们给出的 lambda 表达式 ( Function<? super T,? extends R> mapper ) ?

最佳答案

A Function是需要 X 的东西并返回 Y .

 ? super T     == String
 ? extends R   == Integer

基本上与name -> name.length()你正在实现 @FunctionlInterface Function<T,R>覆盖单个抽象方法 R apply(T t) .

您还可以使用方法引用来缩短它:

Stream<Integer> lengths = names.stream().map(String::length);

关于java - lambda 表达式如何映射到函数式接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46770740/

相关文章:

java - 如何在浏览器中显示可打印的PDF文档?

haskell - 为什么haskell在a >> b中评估a?

java - 从通用接口(interface)扩展

java - 无法使用 Apache POI 读取 Excel

java - 如何将从文本框中获取的用户名添加到网址末尾?

c++ - 警告从 lambda 返回捕获的引用

node.js - lambda 中的 s3.getObject 不返回任何内容

c# - 用于查找属性差异的 Lambda,反射在 C# 中未正确返回

scala - 如何表达函数类型?

java - 如何创建一个新列表并在单个语句中添加一个值