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

Java 如何从ifpresentorese语句中获取对象数据?,java,lambda,optional,Java,Lambda,Optional,我正在尝试从和对象获取一些数据。我有一小段代码,其中: UserAccessValidator只是一个验证器,方法validateAccessToAccount采用Long,并在未授予访问权限时引发异常。就这么简单 userAccessValidator.validateAccessToAccount( peripheralRepository.findById(peripheralId) .ifPresentOrElse(p -> p.getAccount().g

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

UserAccessValidator
只是一个验证器,方法
validateAccessToAccount
采用
Long
,并在未授予访问权限时引发异常。就这么简单

userAccessValidator.validateAccessToAccount(
    peripheralRepository.findById(peripheralId)
        .ifPresentOrElse(p -> p.getAccount().getId(),
            () -> {throw new NotFoundException(Peripheral.class);}));
它没有编译,我得到的信息是
Long
是必需的,但提供的是无效的

如何修复这段代码以使其正常工作?我想获得帐户Id,但我不知道如何实现这一点。。。如能提供更详细的解释,将不胜感激;)

ifpresentorese​()
有一个void返回类型,因此不适合返回值

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

然后您可以调用
orelsetrow
,如果
Optional
为空,它将抛出异常,如果不是空,则返回存储在该
Optional
中的值

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