如何从 ifPresentOrElse 语句中获取对象数据?

How to fetch object data from an ifPresentOrElse statement?

我正在尝试从对象中获取一些数据。我有一小段代码,其中:

UserAccessValidator 只是一个验证器,方法 validateAccessToAccount 接受一个 Long,并在未授予访问权限时抛出异常。就这么简单。

userAccessValidator.validateAccessToAccount(
    peripheralRepository.findById(peripheralId)
        .ifPresentOrElse(p -> p.getAccount().getId(),
            () -> {throw new NotFoundException(Peripheral.class);}));

它没有编译,我得到的信息是 Long 是必需的,但提供的是无效的。

如何修复这段代码使其正常工作?我想获取帐户 ID,但我不知道如何实现...非常感谢更详细的解释 ;)

ifPresentOrElse​() 有一个 void return 类型,所以它不适合 return 一个值。

使用 mapOptional 中的值映射到所需的帐户 ID。这将 return 另一个 Optional

然后你可以调用 orElseThrow,如果 Optional 为空,它会抛出异常,如果不是,return 存储在 Optional 中的值。

userAccessValidator.validateAccessToAccount(
        peripheralRepository.findById(peripheralId)
                            .map(p -> p.getAccount().getId())
                            .orElseThrow​ (() -> {throw new NotFoundException(Peripheral.class);});