让我们看下面的代码。
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/