在 Java8 中使用 orElseGet 与 orElse

我有一个返回 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());


料青山看我应如是
浏览 687回答 1
1回答

慕码人8056858

当然orElseGet()更可取。orElse()即使OptionalDouble不为空,也会执行您的服务,这很浪费(因为menuService.findBySymbol(addWalletAmount.getMenuSymbol()).getPrice().doubleValue()是传递给orElse()方法的参数,并且必须在orElse()执行之前对其进行评估)。orElseGet()如果OptionalDouble为空,只会执行您的服务。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java