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)
并简单地再会看的javadoc的streams.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吗?
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)