【发布时间】:2015-10-21 06:43:34
【问题描述】:
我在为我的班级 Page 找出一个简单的 compareTo 方法时遇到了一些问题:
- 页面通过 getParent() 引用了父页面 - 可以为空
- 页面有一个变量
order,只决定同层级的顺序
我喜欢按以下方式排序:
- 父A
- SubParentOfA1
- SubParentOfA2
- 父B
- 父C
- SubParentOfC1
- SubParentOfC2
我的 compareTo 需要如何解决这个问题?我尝试了以下,目前只能正确排序相同的级别。
我的做法:
@Override
public int compareTo(@NonNull Object o) {
int compare = 0;
if (o instanceof Page) {
Page other = (Page) o;
if (other.parent != null) {
compare = this.compareTo(other.parent);
} else if (parent != null) {
compare = this.parent.compareTo(other);
}
if (compare == 0) {
compare = Integers.compareTo(this.order, other.order);
}
}
return compare;
}
编辑:我的页面类:
class Page{
int order;
Page parent;
}
【问题讨论】:
-
您永远不会将
this.parent与other.parent进行比较。您可以添加级别属性(存储为属性或动态计算)以方便比较。 -
当他们中的一个没有父母时,我不就这样做吗?我递归调用 compareTo 直到我处于顶层。