3 回答

TA贡献1848条经验 获得超10个赞
Java 引入了字节码指令invokedynamic
来构造匿名类,然后generate byte code
为lambdas
. 因此,如果是 lambdas,java 会生成实现类并在运行时生成字节码。一旦字节码生成,其余步骤与普通方法调用相同。因此,在 lambda/method ref 的情况下,only overhead is constructing an anonymous class and generate its byte at runtime
. 所以 lambdas 比普通的方法调用要慢一些。

TA贡献1775条经验 获得超8个赞
我可能认为这个问题是关于Imperative与DeclarativeJava 编程的。
因为 lambda/方法引用只能与匿名类性能进行比较。
他们在执行前采取不同的步骤:
Lambda vs Anonymous Class
linkage class loading
capture instantiation
invocation invocation
总体基准测试表明,lambda 在“热”基准测试中要快一些,而在“冷”基准测试中要快得多。
关于复杂的方法和集合处理,没有X比Y.
您应该指定一个案例来比较性能基准,在某些情况下经典方法可以更快地工作,在某些情况下 - 功能。我可能会假设在大多数情况下经典方法会更快,尤其是在使用可变对象时。
但是使用功能样式以并行方式处理集合要容易得多。流是延迟执行的,这是一个优势。
Java 支持函数式编程、流和 lambda 是非常好的特性,但它们不是灵丹妙药。明智地使用它们。

TA贡献1757条经验 获得超8个赞
与传统的 Java 方法相比,使用 Java 8 API 有很多优点。
Java 8 基本上专注于函数式风格(更多声明式,更少命令式)方法,现在我们可以使用 Java 8 以优雅流畅的函数式风格进行编程,并具有高阶函数。这可以导致代码简洁,错误更少,更易于理解、维护和并行化。
最重要的是:
支持不变性
减少副作用
更喜欢表达式而不是语句
懒惰执行
有很多要补充的,我只给了我的 2cents。
添加回答
举报