java 如何最好地使用Optional填充变量?

avkwfej4  于 2023-04-28  发布在  Java
关注(0)|答案(3)|浏览(166)

我在这里使用了一个可选的ID,但我不喜欢必须声明两个变量来接收数据。什么是更简洁的方法来实现这一点,而不必声明一个额外的OptionalOrg变量?

Optional<Organization> optionalOrg;
    Organization org;

    if (request.getOrgId() != null) {
        optionalOrg = organizationRepository.findById(request.getOrgId());
    } else {
        optionalOrg = organizationRepository.findById(DEFAULT_ORG);
    }

    if (optionalOrg.isPresent()) {
        org = optionalOrg.get();
    } else {
        throw new ClientException("Org not found);
    }
wz3gfoph

wz3gfoph1#

orElseThrow可用于获取包含的值,或者如果为空则抛出您选择的异常。

org = organizationRepository
  .findById(id)
  .orElseThrow(() -> new ClientException("Org not found"));
jrcvhitl

jrcvhitl2#

我可能会这样做:

var orgId = Objects.requireNonNullElse(request.getOrId(), DEFAULT_ORG);
var org = organizationRepository.findById(orgId)
                                .orElseThrow(() ->  new ClientException("Org not found));

如果requireNonNullElse不是Java 11++和类似的函数,请使用适当的类型而不是var

dy2hfwbg

dy2hfwbg3#

试试这个,但我不是百分百确定。.

Optional<Organization> optionalOrg = Optional.ofNullable(request.getOrgId())
    .flatMap(id -> organizationRepository.findById(id))
    .or(() -> organizationRepository.findById(DEFAULT_ORG));

Organization org = optionalOrg.orElseThrow(() -> new ClientException("Org not found"));

相关问题