问题描述
something().orElseGet(() -> (a,b,c) -> {})
// ^----this part------^
其中(a,c)
是具有a
,b
和c
参数的方法。例如:Method(a,c)
返回了一些内容。
我的问题是在实践中,此功能接口的作用是什么,对我来说很混乱。
解决方法
它返回一个Supplier
,然后提供三个参数方法的实现(a,b,c) -> {}
通常,Java中的所有方法参数都会在调用方法后立即进行评估。
这意味着,在orElseGet((a,c) -> {})
的假设情况下,无论是否需要,都会始终创建该方法。但是由于只有在没有其他值时才需要它,因此拥有中间供应商意味着仅在实际需要时才创建该方法。
由于在不存在任何价值的情况下使用的价值可能会任意创建,因此供应商可能节省大量时间。在您的情况下,差异不会太大(创建供应商或创建lambda的成本可能大致相等)。但是在其他情况下,获得该值可能涉及数据库查找,字符串串联等,在这种情况下,仅在实际需要时才执行这些操作会带来巨大的好处。