Java 8中的Lambdas提供了一种将问题定义为语句并使代码简洁的好方法。但是他们是否改变了在JVM中执行语句的方式?
让我们考虑我正在编写一个lambda,它根据条件对对象列表进行流式处理并过滤它们,并将过滤后的值作为相同数据类型的列表返回。我的lambda基本上有一个过滤器和一个收集器。 当这段代码被发送到VM时,编译器是否将lambda函数替换为传统的if循环和for循环?
我问这个是因为虚拟机仍然是相同的,它最初是为命令式编程风格而设计的。 Java 8中真正改变的是我们定义问题陈述的方式(FP)。我的理解是否正确?
答案 0 :(得分:2)
编译器不会“替换”lambda函数。 lambda只是成为普通接口的实例,它们被传递给普通的Java库,这些Java库可以作为普通的Java代码运行。
对于内联和简化lambda调用的能力,JIT肯定已经过一些优化以更加智能,但那里没有魔力。