【发布时间】:2017-10-16 12:48:54
【问题描述】:
让我们看看下面的代码。
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 是如何将我们给出的 lambda 表达式 (name -> name.length()) 映射为 Function<? super T,? extends R> mapper 的吗?
【问题讨论】:
-
你想完成什么?您永远不需要创建 Stream 类型的局部变量。您在寻找
names.stream().map(...).collect(Collectors.toList())吗?另外,不要使用原始的 List 类型。 -
@Michael 实际上我需要观众专注于 lambda 表达式部分。所以我没有添加你提到的后面的添加。这只是为了理解 lambda 到函数式接口的映射。没有其他的。 :))
-
@Michael 明白了。谢谢。 :)) 希望我已经更正了代码。
标签: java lambda functional-programming java-8 java-stream