使用嵌套的if语句比较无序的组(而非列表)

时间:2018-09-01 08:16:28

标签: java compare equals nested-if

我分配了一个创建名为Trio的对象,该对象可以包含实现可比的三个对象。这是标题:

public class Trio<T extends Comparable<? super T>> implements Comparable<Trio<T>>

在编写equals方法时,我必须确定两个Trios是否以任意顺序包含三个相同的逻辑等效对象,它们在逻辑上是否等效。

现在,我知道我可以将每个对象中的三个对象放入两个不同的列表中,对列表进行排序,然后逐项进行比较,但是我决定将逻辑嵌套为if

4层中有15条if语句。

此代码仅在绝对需要进一步检查更多项目时才进入for循环:

@Override
public boolean equals(Object other) {
    if (other instanceof Trio<?>) {
        Trio<?> otherTrio = (Trio<?>) other;

        // Is there really a best practice for this? I feel like this
        // is most efficient since it creates no new objects

        if (!this.getItem(1).equals(otherTrio.getItem(1))) {

            if (!this.getItem(1).equals(otherTrio.getItem(2))) {

                if (!this.getItem(1).equals(otherTrio.getItem(3))) {
                    return false;
                }

                if (this.getItem(2).equals(otherTrio.getItem(1))) {

                    if (this.getItem(2).equals(otherTrio.getItem(2))) {
                        return false;
                    }

                    if (this.getItem(3).equals(otherTrio.getItem(1))) {
                        return false;
                    }

                    return true;

                }

                if (this.getItem(3).equals(otherTrio.getItem(2))) {
                    return false;
                }

                return true;

            }

            if (this.getItem(2).equals(otherTrio.getItem(3))) {

                if (this.getItem(2).equals(otherTrio.getItem(1))) {
                    return false;
                }

                if (this.getItem(3).equals(otherTrio.getItem(3))) {
                    return false;
                }

                return true;

            }

            if (this.getItem(3).equals(otherTrio.getItem(1))) {
                return false;
            }

            return true;

        }

        if (!this.getItem(2).equals(otherTrio.getItem(2))) {

            if (!this.getItem(2).equals(otherTrio.getItem(3))) {
                return false;
            }

            if (!this.getItem(3).equals(otherTrio.getItem(2))){
                return false;
            }

            return true;

        }

        if (!this.getItem(3).equals(otherTrio.getItem(3))) {
            return false;
        }

        return true;

    } else
        return false;

}

此代码是否在良好实践中?对我来说似乎有些俗气,但是除了上面描述的方法之外,我想不出一种更优雅的方式来做到这一点。

0 个答案:

没有答案