如何使用正确的方法检查列表的 属性 是否为空?
How to check if a property of a list is null using a proper approach?
我的 Java 应用程序中有以下方法:
private void save(final CopyRequest request) {
if (request.getName() != null) {
// stuff
}
}
我通过将方法参数转换为 List<CopyRequest>
来更新此方法,如下所示:
private void save(final List<CopyRequest> requestList) {
if (requestList.getName() != null) {
// stuff
}
}
那么,我是否应该通过 requestList.stream().forEach(request -> request.getName == null)
或类似的方式检查名称 属性 是否为空?
您可以使用 Stream#allMatch
.
if(requestList != null
&& requestList.stream().allMatch(request -> request != null
&& request.getName() != null)){
}
使用 filter 进行空值检查的细微变化,
if(requestList != null
&& requestList.stream()
.filter(Objects:nonNull)
.allMatch(request -> request.getName() != null)) {
// code here
}
好吧,方法取决于您实际想要执行的操作。
第一个选项是 - 当且仅当每个项目都有名称(全有或全无)时保存列表。
boolean allWithName = requestList.stream()
.map(CopyRequest::getName)
.allMatch(Objects::nonNull);
if(allWithName){
// do stuff
}
第二个选项 - 保存每个有名称的项目(选择性保存)
requestList.stream()
.filter(request -> request.getName() != null) // (1)
.forEach(this::save); // Note: it is overloaded version for single request
事实上,您甚至可以省略 (1)
的过滤,因为重载版本已经执行了检查
我的 Java 应用程序中有以下方法:
private void save(final CopyRequest request) {
if (request.getName() != null) {
// stuff
}
}
我通过将方法参数转换为 List<CopyRequest>
来更新此方法,如下所示:
private void save(final List<CopyRequest> requestList) {
if (requestList.getName() != null) {
// stuff
}
}
那么,我是否应该通过 requestList.stream().forEach(request -> request.getName == null)
或类似的方式检查名称 属性 是否为空?
您可以使用 Stream#allMatch
.
if(requestList != null
&& requestList.stream().allMatch(request -> request != null
&& request.getName() != null)){
}
使用 filter 进行空值检查的细微变化,
if(requestList != null
&& requestList.stream()
.filter(Objects:nonNull)
.allMatch(request -> request.getName() != null)) {
// code here
}
好吧,方法取决于您实际想要执行的操作。
第一个选项是 - 当且仅当每个项目都有名称(全有或全无)时保存列表。
boolean allWithName = requestList.stream()
.map(CopyRequest::getName)
.allMatch(Objects::nonNull);
if(allWithName){
// do stuff
}
第二个选项 - 保存每个有名称的项目(选择性保存)
requestList.stream()
.filter(request -> request.getName() != null) // (1)
.forEach(this::save); // Note: it is overloaded version for single request
事实上,您甚至可以省略 (1)
的过滤,因为重载版本已经执行了检查