Java 8 中的懒加载与递归优化
1. 懒加载评估的优势
在进入lazyEvaluator()方法之前,参数不会被评估。在某个版本中,第二次对evaluate()的调用被跳过了。调用lazyEvaluator()大约只需要两秒,而之前调用eagerEvaluator()则大约需要四秒。由此可见,懒加载评估能够节省成本。
当需要评估大量方法,或者方法评估耗时、耗资源时,懒加载技术就非常有用。不过,它也有缺点,即需要调用者将调用封装在 lambda 表达式中。虽然 lambda 表达式简洁,但与通常的参数传递方式相比,还是有些麻烦。在某些情况下,可以使用方法引用代替 lambda 表达式,这样能让代码更简洁,减轻一些负担。
2. 利用流的懒加载特性
流的懒加载特性非常强大,主要体现在两个方面:一是无需特殊操作就能受益;二是可以推迟一系列的评估,只在需要时评估逻辑中最重要的部分。
2.1 中间操作和终端操作
流有两种类型的方法:中间操作和终端操作,它们协同工作。流懒加载的秘诀在于链式调用多个中间操作,最后跟一个终端操作。
像map()和filter()这样的方法属于中间操作。调用它们会立即返回,而提供给它们的 lambda 表达式不会立即评估。这些方法的核心行为会被缓存起来,等待后续执行,调用时不会进行实际工作。当调用findFirst()和reduce() </