Java中从嵌套Optional元素获取值的更简洁方法
简化嵌套Optional中orderLabel的获取方式
当orderLabel存在于嵌套的Optional对象中时,有没有更简洁的方式获取该orderLabel信息?现有实现代码如下:
Optional<Order> maybeOrderInfo = getOrderInfo(); // API调用 Optional<String> orderLabel = maybeOrderInfo.isPresent() ? maybeOrderInfo .get() .genericOrderInfo() .map(orderInfo -> orderInfo.get("orderLabel")) .or(() -> Optional.empty()) : Optional.empty();
简化后的代码
直接利用Optional的flatMap和map链式调用,完全避免显式的isPresent()判断:
Optional<Order> maybeOrderInfo = getOrderInfo(); // API调用 Optional<String> orderLabel = maybeOrderInfo .flatMap(Order::genericOrderInfo) .map(orderInfo -> orderInfo.get("orderLabel"));
说明
- 原代码里的
maybeOrderInfoPresent应该是笔误,正确写法应为maybeOrderInfo .or(() -> Optional.empty())完全多余,flatMap/map在没有对应值时本身就会返回Optional.empty(),无需额外处理- 链式调用更符合Optional的设计初衷,代码简洁流畅,可读性更高
内容的提问来源于stack exchange,提问作者Punter Vicky
相关产品推荐
相关产品推荐

