如何从ifPresent of Optional中选择值

时间:2015-04-22 08:15:37

标签: java java-8 optional

如何从方法ifPresent中选择值,因为此方法返回void?

我想要应用的逻辑是:如果对象deliveryInfo不是null,请获取投放数量并将其设置为对象dto,但使用可选,不带任何空检查。

Optional<TT021DeliveryCodingContainerDto> deliveryInfo =
    tt021OrderingBusinessHandler
        .getDeliveryCodingContainersByDeliveryAndOrderDetail(
            delivery.getId(), position.getOrderDetails().getId());
deliveryInfo.ifPresent(TT021DeliveryCodingContainerDto::getDeliveredQuantity);
dto.setQuantityDelivered(deliveredQuantity);

2 个答案:

答案 0 :(得分:4)

Optional.ifPresent()是一个接受Consumer的终端方法。消费者是一个函数,它接受一些参数并且消费它们并且什么也不返回。您可以从作为使用者传递的lambda表达式中使用的参数中选择值。

Optional<TT021DeliveryCodingContainerDto> deliveryInfo =
tt021OrderingBusinessHandler
    .getDeliveryCodingContainersByDeliveryAndOrderDetail(
        delivery.getId(), position.getOrderDetails().getId());

deliveryInfo.map(info -> info.getDeliveredQuantity())
.ifPresent(quantity -> dto.setQuantityDelivered(quantity); // you can replace those with method references

答案 1 :(得分:2)

deliveryInfo.ifPresent(i -> dto.setQuantityDelivered(i.getDeliveredQuantity());

之类的东西

如果您想从方法中返回一些内容,请使用map代替ifPresent;这将返回另一个Optional包装结果(如果有的话)。