组合和抛出?

kadbb459  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(195)

这个问题在这里已经有答案了

在现有Java7代码中使用Java8可选(4个答案)
在Java8可选管道中展平元素列表(2个答案)
Java8可选和flatmap-怎么了(1个答案)
java 8-optional.flatmap和optional.map之间的区别(6个答案)
上个月关门了。
我有以下代码,它按预期工作:

Optional.ofNullable(testItem.getId())
                .map(testItemRepository::get)
                .orElseThrow(() -> new TestException(ReturnCode.UNKNOWN_ID))
                .orElseThrow(() -> new TestException(ReturnCode.UNKNOWN_ID));

我想知道是否有一种方法,只是有一个部分或做它少冗余?

omtl5h9j

omtl5h9j1#

似乎是这样的 testItemRepository::get 返回另一个 Optional<Something> . 在这种情况下,你不应该使用 map . 使用 map 会给你一个嵌套的可选- Optional<Optional<Something>> 正如你所发现的,与之共事并不好。 flatMap 正是针对这种情况:

Optional.ofNullable(testItem.getId())
            .flatMap(testItemRepository::get)
            .orElseThrow(() -> new TestException(ReturnCode.UNKNOWN_ID));
``` `flatMap` 变成 `Optional<A>` 到一个 `Optional<B>` ,给定 `Function<A, Optional<B>>` .
jdzmm42g

jdzmm42g2#

使用 Optional#flatMap 方法,只要该方法的调用 testItemRepositoryget 结果 Optional .

Optional.ofNullable(testItem.getId())
            .flatMap(testItemRepository::get)
            .orElseThrow(() -> new TestException(ReturnCode.UNKNOWN_ID));

i、 e.从 Optional<Optional<MyObject>>Optional<MyObect> .

相关问题