java - 在 Java 中检查属性是否为空的最简单方法

标签 java java-8 java-stream

我有一个方法可以检查 Account 的某些属性(不是全部),如果这些属性中的任何一个为 null 或为空,它会返回 true,我需要一种优雅的方法来执行此操作,而不必编写那么多条件语句。

private boolean isInvalidSlateAccount(Account account) {

    return (account.getAccesskeyid() == null || account.getAccesskeyid().trim().isEmpty()
            || account.getAccount() == null || account.getAccount().trim().isEmpty()
            || account.getAwsregion() == null || account.getAwsregion().trim().isEmpty()
            || account.getGatewayname() == null || account.getGatewayname().trim().isEmpty()
            || account.getGatewaytype() == null || account.getGatewaytype().trim().isEmpty()
            || account.getSecretaccesskey() == null || account.getSecretaccesskey().trim().isEmpty()
            || account.getTenant() == null || account.getTenant().trim().isEmpty() || account.getZone() == null || account
            .getZone().trim().isEmpty());

}

我做到了

private boolean isInvalidSlateAccount(Account account) {
    List<String> properties = Arrays.asList(
        account.getAccesskeyid(),
        account.getAccount(),
        account.getAwsregion(),
        account.getGatewayname(),
        account.getGatewaytype(),
        account.getSecretaccesskey(),
        account.getTenant(),
        account.getZone()
    );
    return properties.stream()
        .anyMatch(s -> (s == null || s.trim().isEmpty()));

}

但这将检查我不打算执行的帐户对象的所有属性的条件。如何更优雅地实现这一目标?

最佳答案

写一个方法isNullOrEmpty(String):

static boolean isNullOrEmpty(String s) {
  return s == null || s.trim().isEmpty()
  // Or return s == null || s.isBlank(); in Java 11+
}

所以你可以这样写:

return isNullOrEmpty(account.getAccesskeyid())
    || isNullOrEmpty(account.getAccount())
    /* etc */;

我认为这比涉及构建流或列表的事情更可取,因为它简单:它使用非常基本的语言功能,即使是新手程序员也很容易理解。

此外,它避免了评估所有字段(例如,将 String...ss 传递给 isNullOrEmpty,然后在数组上做一些事情)因为它短-电路,因为它会在找到第一个 null 或空字符串后立即停止。

它也不需要创建任何对象(如隐式数组,或者 Arrays.asList(...) 中的 List)调用方法的简单人工制品:trim() 确实可能创建对象,但这是“有用”的工作,因为这是评估条件所必需的。

关于java - 在 Java 中检查属性是否为空的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56072593/

相关文章:

android - TreeMap 中的条目不是公开的;无法从外部包访问

java - 为什么 Stream<T> 没有实现 Iterable<T>?

Java 8 : Convert dates using stream

performance - Java 8流产生的代码是否比普通命令式循环慢?

Java ArrayList 接口(interface)类型

java - 找不到aspectj-maven-plugin的依赖项

java - 如何加载外部 "war"文件到spring boot的嵌入式tomcat服务器

java - IntelliJ Idea,如何从控制台删除java文件目录?

java - 为什么我在 STS 中遇到编译错误

java - Java 8中通过串口发送和接收数据的多平台方式?