java - 避免复杂 if else 分支的最佳方法 - Java

标签 java if-statement null

我有 rest API,它使用多个参数(作为请求参数)来搜索实体。此搜索可能有多种变体。以下方法在末尾调用以使用给定参数搜索实体。

public List<Person> searchPerson(final String name, 
           final String city, final String state, final String code) {
    if( name != null && city != null && state != null && code != null ){
        //Search person in database with above all parameters
        //personRepositoy is spring data repository. 
        personRepositoy.findByNameAndCityAndStateAndCode(name, city, state, code);
    } else if( city != null && state != null && code != null){
        personRepositoy.findByCityAndStateAndCode(name, city, state, code)
    }
}

有什么方法可以避免在这里出现复杂的(容易出错,重构起来不那么容易)分支?可能正在使用集合或函数式编程概念?我真的不喜欢写这种分支代码(因为这些代码很难维护)

最佳答案

您可以像这样创建自己的实用程序:

public static boolean requireNonNull(Object... objects) {
    for(Object obj : objects) {
        if(obj == null) return false;
    }
    return true;
}

示例用法

public List<Person> searchPerson(final String name, final String city, 
                                 final String state, final String code) {
    if(MyUtilityClass.requireNonNull(name, city, state, code)) {
        //Search person in database with above all parameters
        //personRepositoy is spring data repository. 
        personRepositoy.findByNameAndCityAndStateAndCode(name, city, state, code);
    } else if(MyUtilityClass.requireNonNull(city, state, code)) {
        personRepositoy.findByCityAndStateAndCode(city, state, code)
    }
}

关于java - 避免复杂 if else 分支的最佳方法 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49917174/

相关文章:

javascript - 单击链接时,查找带有某个子项的父项是否存在jquery

Grails - 从 if 和 else 中使用 null 属性创建条件

sql-server - 比较触发器中的字段

php - 检查 if 循环中是否为 null

java - 对于Set类型,未定义()方法

r - 如何在R中的map函数中使用if else

java - 将秒转换为人类可读格式 MM :SS Java

ruby - .? ruby 中的(存在)运算符?

java - Spring Retry 不适用于第二级方法

java - 获取 java.security.cert.CertificateException,但是证书已导入信任库