Udd*_*tam 1 java lambda functional-programming java-8
这一行功能编程代码可以: 2*3 + 4*3 + 6*3 + 8*3 + 10*3操作.
int sum = IntStream.rangeClosed(1,10) /* closed range */
.filter(x -> x%2 == 0) /* filter to even numbers in range */
.map(x -> x*3) /* map */
.sum(); /* actual sum operation happens */
System.out.println(sum); /* prints 90 */
Run Code Online (Sandbox Code Playgroud)
我明白它在做什么.我想知道在内存分配方面发生了什么?我们可以使用与上述操作相似的旧替代方案.这很容易理解,但基于Lambda的代码更具表现力.
int sum=0;
for(int i=1; i<=10;i++) {
if(i%2 == 0) {
sum=sum+i*3;
}
}
System.out.println(sum); /* prints 90 */
Run Code Online (Sandbox Code Playgroud)
首先,lambda expressions将对类文件中的静态方法进行去糖处理(用于javap查看).
因为Predicate将会.class生成(您可以-Djdk.internal.lambda.dumpProxyClasses=/Your/Path在调用类时通过参数集查看).
同样的事情会在Function该map操作.
由于你的lambdas stateless将会有一个实例,Predicate并Function为每个操作创建并重新使用.如果它是一个有状态的lambda - 将为每个处理的元素生成一个新实例.
从您的问题标题中map,reduce不要提高性能(除非有大量的元素,您可以将流程并行化并带来好处).您简单的循环会更快-但不是说比流快得多.你还选择了一个非常简单的例子 - 假设你选择了一个做一些重量grouping然后是自定义collection等的例子- 简单方法的详细程度stream就很重要了.
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |