Java 合并Orelse投掷?
我有以下代码,它可以按预期工作:Java 合并Orelse投掷?,java,optional,Java,Optional,我有以下代码,它可以按预期工作: Optional.ofNullable(testItem.getId()) .map(testItemRepository::get) .orElseThrow(() -> new TestException(ReturnCode.UNKNOWN_ID)) .orElseThrow(() -> new TestException(ReturnCode.UN
Optional.ofNullable(testItem.getId())
.map(testItemRepository::get)
.orElseThrow(() -> new TestException(ReturnCode.UNKNOWN_ID))
.orElseThrow(() -> new TestException(ReturnCode.UNKNOWN_ID));
我想知道是否有一种方法可以只使用一个或多个部分,还是减少冗余?使用Optional#flatMap
方法,只要调用方法testItemRepositoryget
导致Optional
就可以展平可选结构
Optional.ofNullable(testItem.getId())
.flatMap(testItemRepository::get)
.orElseThrow(() -> new TestException(ReturnCode.UNKNOWN_ID));
也就是说,从
Optional
到Optional
,testItemRepository::get
返回另一个Optional
。在这种情况下,不应使用map
。使用map
将得到一个嵌套的可选-optional
,正如您所发现的,使用它并不好<代码>平面图正是针对这种情况而设计的:
Optional.ofNullable(testItem.getId())
.flatMap(testItemRepository::get)
.orElseThrow(() -> new TestException(ReturnCode.UNKNOWN_ID));
Optional.ofNullable(testItem.getId())
.flatMap(testItemRepository::get)
.orElseThrow(() -> new TestException(ReturnCode.UNKNOWN_ID));
flatMap
将Optional
转换为Optional
,给定函数
很难判断,因为不清楚testItemRepository::get
返回什么(它是否返回选项
?)。尝试使用flatMap
而不是map
,并删除最后一行orelsetrow
。是,它返回可选的。谢谢你的快速回答。