Java 8:延迟计算

本文深入探讨了Java 8 Stream API中的惰性计算特性,解释了lambda表达式的延迟求值行为。通过实例说明了在Stream操作中,filter等中间操作并不会立即执行,而是在最后的收集操作时才进行计算,从而提高性能。同时,文章指出Java方法参数的求值策略是饥饿的,但lambda表达式的求值在实际调用时才发生。
摘要由CSDN通过智能技术生成

 

Java8:Stream概念的细化,讨论延迟计算/惰性求值Lazy Evaluations

1.惰性 Vs. 饥饿

求值策略决定函数的实参应该在何时被求值,以及实参以什么方式传递到函数体内。虽然看起来求值策略仅仅涉及到函数调用,其实表达式的操作符,条件表达式的?都可以归结为一个函数调用。函数的实参求值时机分两种:

  • 饥饿求值(Strict/Eager Evaluation),应用序 (Applicative order,实用序)求值。简单地说,函数调用时先计算所有实参的值。在方法被调用前,所有的实参通通被求值,即使方法中不使用某些实参也被求值。实参的值计算之后,以什么方式传递到函数体内是应用序要考虑到第二个问题。在C/C++教学中一般会介绍按值传递(pass-by-value,或Call-by-value)按引用传递(pass-by-reference)
  • 延迟计算/惰性求值 (delay computing /Lazy Evaluation),又被称为normal-order evaluation(正常序求值),其求值顺序按“最左最外/leftmost outermost”方式求值。如果采用这种方式,其过程“完全展开而后归约”(''fully expand and then reduce
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值