Java 8可选过滤器(仅当存在时)



我有一个可为null的对象,如果该对象不是null并且不满足条件,我将尝试抛出异常。

我用Optional:试试这种方法

Optional.ofNullable(nullableObject)
.filter(object -> "A".equals(object.getStatus()))
.orElseThrow(() -> new BusinessUncheckedException("exception message"));

当对象不是null时,它可以按照我的意愿工作,但除此之外,它也会抛出异常(我不希望这样(。

有没有一种方法可以使用Optional或其他不使用if object != null的方法?

假设您没有对返回的对象执行任何操作,则可以使用ifPresent并传递Consumer

nullableObject.ifPresent(obj -> {
if (!"A".equals(obj.getStatus())) {
throw new BusinessUncheckedException("exception message");
}
});

注意:正如@Pshemo在评论中提到的,Consumer功能接口的合约只允许抛出RuntimeException。

否则,您最好使用if检查,如您所述。

IMO,在Optional上使用filter进行此类检查不是那么可读/直观。我更喜欢

if (obj != null && !"A".equals(obj.getStatus())) {     
throw new BusinessUncheckedException("exception message");
}

如果map为null,则Optional变为空:

Optional.ofNullable(nullableObject)
.map(object -> "A".equals(object.getStatus()) ? object : null)
.ifPresent(object -> { throw new BusinessUncheckedException("exception message"); });

最新更新