我正在查看“ Java SE 8 for the really Impatient: Programming with Lambdas ”中的一个例子。
所以我不明白的是 - 我们可以在示例 1(不使用 lambda 的代码)中使用 logger.isLoggable(Level.INFO)
并且只有当我们满足 logger.isLoggable(Level.INFO)
时才会计算消息字符串。
logger.info("x: " + x + ", y: " + y);
在这种情况下使用 lambda 有什么用?
最佳答案
据我所知,这完全是关于 Supplier
以及推迟执行的方式。 IMO 更好的例子是 Optional
两种方法: orElse
和 orElseGet
。orElse
返回 T
或在您的示例中返回 String
;另一方面 orElseGet
返回一个 Supplier<T>
,仅在需要时计算(当 Optional 实际丢失时):
public T orElseGet(Supplier<? extends T> supplier) {
return value != null ? value : supplier.get();
}
这里的区别在于
orElse
总是计算值,有点像急切地;即使它不需要。关于java - 谁能解释一下这个说法 - "The point of all lambdas is deferred execution",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44378418/