Java 8 仅在存在时可选过滤器
Java 8 Optional filter only if present
我有一个可为 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
函数接口的契约只允许抛出RuntimeExceptions。
否则,您最好使用您提到的 if 检查。
IMO,在 Optional 上使用 filter
进行此类检查并不是 readable/intuitive。我更喜欢,
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"); });
我有一个可为 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
函数接口的契约只允许抛出RuntimeExceptions。
否则,您最好使用您提到的 if 检查。
IMO,在 Optional 上使用 filter
进行此类检查并不是 readable/intuitive。我更喜欢,
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"); });