重构多个| |和&&;java中If语句内部的条件

重构多个| |和&&;java中If语句内部的条件,java,if-statement,refactoring,Java,If Statement,Refactoring,在java中重构If语句中的多个| |和&&条件 for (Student students : studentList) { if ((Constants.CODE1.equals(students.getactivities().getCode()) && ValidationRepository.validateStudentId1(department.getId())) || ((Constants.CODE2)

在java中重构If语句中的多个| |和&&条件

for (Student students : studentList) {

    if ((Constants.CODE1.equals(students.getactivities().getCode())
            && ValidationRepository.validateStudentId1(department.getId()))
            || ((Constants.CODE2).equals(students.getactivities().getCode())
                    && ValidationRepository.validateStudentId2(department.getId())
                    && ValidationRepository.validateStudentId3(department.getId()))
            || ((Constants.CODE3
                    .equals(students.getactivities().getCode())
                    || Constants.CODE4
                            .equals(students.getactivities().getCode()))
                    && (ValidationRepository.validateStudentId4(
                            department.getId(),
                            students.getactivities().getCode())))
            || ((Constants.CODE5.equals(students.getactivities().getCode())
                    || Constants.CODE6
                            .equals(students.getactivities().getCode())

                    || Constants.CODE7
                            .equals(students.getactivities().getCode())
                    || Constants.CODE15
                            .equals(students.getactivities().getCode())

                    || Constants.CODE8
                            .equals(students.getactivities().getCode())
                    || Constants.CODE9
                            .equals(students.getactivities().getCode())

                    || Constants.CODE10
                            .equals(students.getactivities().getCode())
                    || Constants.CODE11
                            .equals(students.getactivities().getCode()))

                    && (ValidationRepository.validateStudentId4(
                            department.getId(),
                            students.getactivities().getCode())))

    )
    { 
        some statements
    }
在java中重构If语句中的多个| |和&&条件

for (Student students : studentList) {

    if ((Constants.CODE1.equals(students.getactivities().getCode())
            && ValidationRepository.validateStudentId1(department.getId()))
            || ((Constants.CODE2).equals(students.getactivities().getCode())
                    && ValidationRepository.validateStudentId2(department.getId())
                    && ValidationRepository.validateStudentId3(department.getId()))
            || ((Constants.CODE3
                    .equals(students.getactivities().getCode())
                    || Constants.CODE4
                            .equals(students.getactivities().getCode()))
                    && (ValidationRepository.validateStudentId4(
                            department.getId(),
                            students.getactivities().getCode())))
            || ((Constants.CODE5.equals(students.getactivities().getCode())
                    || Constants.CODE6
                            .equals(students.getactivities().getCode())

                    || Constants.CODE7
                            .equals(students.getactivities().getCode())
                    || Constants.CODE15
                            .equals(students.getactivities().getCode())

                    || Constants.CODE8
                            .equals(students.getactivities().getCode())
                    || Constants.CODE9
                            .equals(students.getactivities().getCode())

                    || Constants.CODE10
                            .equals(students.getactivities().getCode())
                    || Constants.CODE11
                            .equals(students.getactivities().getCode()))

                    && (ValidationRepository.validateStudentId4(
                            department.getId(),
                            students.getactivities().getCode())))

    )
    { 
        some statements
    }
在java中重构If语句中的多个| |和&&条件

for (Student students : studentList) {

    if ((Constants.CODE1.equals(students.getactivities().getCode())
            && ValidationRepository.validateStudentId1(department.getId()))
            || ((Constants.CODE2).equals(students.getactivities().getCode())
                    && ValidationRepository.validateStudentId2(department.getId())
                    && ValidationRepository.validateStudentId3(department.getId()))
            || ((Constants.CODE3
                    .equals(students.getactivities().getCode())
                    || Constants.CODE4
                            .equals(students.getactivities().getCode()))
                    && (ValidationRepository.validateStudentId4(
                            department.getId(),
                            students.getactivities().getCode())))
            || ((Constants.CODE5.equals(students.getactivities().getCode())
                    || Constants.CODE6
                            .equals(students.getactivities().getCode())

                    || Constants.CODE7
                            .equals(students.getactivities().getCode())
                    || Constants.CODE15
                            .equals(students.getactivities().getCode())

                    || Constants.CODE8
                            .equals(students.getactivities().getCode())
                    || Constants.CODE9
                            .equals(students.getactivities().getCode())

                    || Constants.CODE10
                            .equals(students.getactivities().getCode())
                    || Constants.CODE11
                            .equals(students.getactivities().getCode()))

                    && (ValidationRepository.validateStudentId4(
                            department.getId(),
                            students.getactivities().getCode())))

    )
    { 
        some statements
    }

让我给你一个建议:

  • 我相信你可以把所有代码都包含在列表中,并检查天气学生。getactivities()。getCode()在列表中
  • listOf(Constants.CODE7、Constants.CODE8、Constants.CODE9…)包含(students.getactivities().getCode());
    
  • 还应将代码块提取到外部方法:
  • private验证学生代码1(学生)
    {
    返回常量.CODE1.equals(students.getactivities().getCode())
    &&ValidationRepository.validateStudentId1(department.getId());
    }
    
    这个问题没有明确的答案,但我有以下建议:

  • 不要每次都调用
    students.getactivities().getCode()
    。这不仅会降低代码的可读性,而且效率低下。(除非此方法不是每次都返回相同的值!) 而是在if语句之前使用变量:
  • int code=students.getactivities().getCode();
    
    然后,您可以随时引用该变量。对于
    department.getId()
    也可以这样做

  • 您可以使用助手方法避免将该代码与多个常量进行比较,如下所示:
  • 私有布尔匹配任意(int-code,int…可能匹配){
    for(整数匹配:可能匹配){
    if(code==match)返回true;
    }
    返回false;
    }
    
    这样,您的代码将如下所示:

    int departmentId=department.getId();
    适用于(学生:学生名单){
    int code=students.getactivities().getCode();
    //案例1
    if((常量.CODE1.equals)(代码)
    &&ValidationRepository.validateStudentId1(部门ID))
    //案例2
    ||(常量.CODE2.equals(代码)
    &&ValidationRepository.validateStudentId2(部门ID)
    &&ValidationRepository.validateStudentId3(部门ID))
    //案例3
    ||(匹配任意(代码,常数.CODE3,常数.CODE4)
    &&ValidationRepository.validateStudentId4(部门ID,代码))
    //案例4
    ||(匹配任何(代码,
    6.5,
    代码6,
    第7.7段,
    代码8,
    代码9,
    代码10,
    第11条,
    常数(代码15)
    &&ValidationRepository.validateStudentId4(部门ID,代码))){
    //一些声明
    }
    }
    //方法的其余部分
    私有布尔匹配任意(int代码,int…可能匹配){
    for(整数匹配:可能匹配){
    if(code==match)返回true;
    }
    返回false;
    }
    

    仍然不漂亮,但已经好多了。为了更好,您可以尝试将这4个案例转换为单独的语句,然后让它们调用相同的代码。

    创建一个方法来验证student 在方法内部创建常量代码和验证repo函数的映射

    public boolean validateStudent(String constantCode, departmentId){
    Map<String, Boolean> map = new HashMap<>();
    map.put(Constants.CODE1,  
    ValidationRepository.validateStudentId1(departmentId));
    map.put(Constants.CODE2,  
    ValidationRepository.validateStudentId2(departmentId));
    
    if(map.containsKey(constantCode)){
            return map.get(operation);
        
        }
        
        return false;
    
    
     }
    
    在内部,常量代码键的映射值将是您的函数。
    确保在映射中使用相同的方法参数名和键值。

    请提供格式良好的代码和相关的类定义。创建一个包含所有可能性的列表,并使用“contains”