重构多个| |和&&;java中If语句内部的条件
在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)
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
}
让我给你一个建议:
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”