我有一个返回OptionalDouble的服务,如果为null,则从另一个服务返回一个值,但是我不知道它在性能或最佳实践方面是否更好orElseGet或orElse。.
选项1)
fixerService.getRate(addWalletAmount.getMenuSymbol())
.orElseGet(() -> menuService
.findBySymbol(addWalletAmount
.getMenuSymbol())
.getPrice()
.doubleValue());
选项2)
fixerService.getRate(addWalletAmount.getMenuSymbol())
.orElse(menuService
.findBySymbol(addWalletAmount
.getMenuSymbol())
.getPrice()
.doubleValue());
答案 0 :(得分:2)
当然最好使用orElseGet()
。即使orElse()
不为空,OptionalDouble
也会执行您的服务,这很浪费(因为menuService.findBySymbol(addWalletAmount.getMenuSymbol()).getPrice().doubleValue()
是传递给orElse()
方法的参数,因此必须在执行之前先对其进行求值orElse()
被执行)。
orElseGet()
仅在OptionalDouble
为空的情况下执行您的服务。