在Java8中使用orElseGet与orElse

时间:2018-11-11 11:43:53

标签: java java-8 optional

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

1 个答案:

答案 0 :(得分:2)

当然最好使用orElseGet()。即使orElse()不为空,OptionalDouble也会执行您的服务,这很浪费(因为menuService.findBySymbol(addWalletAmount.getMenuSymbol()).getPrice().doubleValue()是传递给orElse()方法的参数,因此必须在执行之前先对其进行求值orElse()被执行)。

orElseGet()仅在OptionalDouble为空的情况下执行您的服务。