如何从 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 一个值。
使用 map
将 Optional
中的值映射到所需的帐户 ID。这将 return 另一个 Optional
。
然后你可以调用 orElseThrow
,如果 Optional
为空,它会抛出异常,如果不是,return 存储在 Optional
中的值。
userAccessValidator.validateAccessToAccount(
peripheralRepository.findById(peripheralId)
.map(p -> p.getAccount().getId())
.orElseThrow (() -> {throw new NotFoundException(Peripheral.class);});
我正在尝试从对象中获取一些数据。我有一小段代码,其中:
UserAccessValidator
只是一个验证器,方法 validateAccessToAccount
接受一个 Long
,并在未授予访问权限时抛出异常。就这么简单。
userAccessValidator.validateAccessToAccount(
peripheralRepository.findById(peripheralId)
.ifPresentOrElse(p -> p.getAccount().getId(),
() -> {throw new NotFoundException(Peripheral.class);}));
它没有编译,我得到的信息是 Long
是必需的,但提供的是无效的。
如何修复这段代码使其正常工作?我想获取帐户 ID,但我不知道如何实现...非常感谢更详细的解释 ;)
ifPresentOrElse()
有一个 void return 类型,所以它不适合 return 一个值。
使用 map
将 Optional
中的值映射到所需的帐户 ID。这将 return 另一个 Optional
。
然后你可以调用 orElseThrow
,如果 Optional
为空,它会抛出异常,如果不是,return 存储在 Optional
中的值。
userAccessValidator.validateAccessToAccount(
peripheralRepository.findById(peripheralId)
.map(p -> p.getAccount().getId())
.orElseThrow (() -> {throw new NotFoundException(Peripheral.class);});