lambda表达式如何映射到功能界面?

Sup*_*hne 8 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());
Run Code Online (Sandbox Code Playgroud)

并简单地再会看的javadocstreams.map.map方法的签名就像这样.

<R> Stream<R> map(Function<? super T,? extends R> mapper)
Run Code Online (Sandbox Code Playgroud)

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

Eug*_*ene 8

A Function是需要X和回报的东西Y.

 ? super T     == String
 ? extends R   == Integer
Run Code Online (Sandbox Code Playgroud)

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

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

Stream<Integer> lengths = names.stream().map(String::length);
Run Code Online (Sandbox Code Playgroud)