避免多个if / else条件

时间:2018-08-09 19:57:24

标签: java

使用Java 6

要检查70多个属性,如下所示。重构代码的最佳方法是什么?

    if(0 == compareField1) {            
        if(0 == compareField2) {
            if(0 == compareField3) {
                if(0 == compareField4) {
                    if(0 == compareField5) {
                        ......
                    } else {
                        return compareField5;
                    }
                } else {
                    return compareField4;
                }
            } else {
                return compareField3;
            }               
        } else {
            result = compareField2;
        }           
    } else {
        result = compareField1;
    }

3 个答案:

答案 0 :(得分:7)

您可以使用整数数组,其中索引为X的单元格将保留字段编号X的值

final int fieldsCount = 60;
int[] fields = new int[fieldsCount ];
fields = loadFields(); // here you are populating fields

for(int i = 0; i < fieldsCount ; i++) if(fields[i] != 0) return fields[i];

// further logic (else)

答案 1 :(得分:1)

嗯...是这样的吗?

for (int result : Arrays.asList(compareField1, compareField2, ..., compareField5)) {
    if (result != 0) return result;
}

另外,看看this

答案 2 :(得分:0)

没有提供实际的代码示例。

您说的是

  

有2个列表。遍历这些列表并使用比较器比较所有属性的对象,以检查它们是否相等。只需要获取不在列表1中的对象。

我会将两个列表都转换为一个集合(list1> set1和list2> set2),如果顺序不相关,则将HashSet转换,如果需要顺序的对象,则将TreeSet转换。例如

Set<whatevertype> set1 = new HashSet<whatevertype>(list1);

然后,您可以简单地使用set2中removeAll()的set1项目,例如:

set2.removeAll(set1);

set2'的左边是一组不在set1中的对象的截短集合。