我们有类别列表,其中每个类别可以具有父字段,该父字段引用当前类别的父类别。您能告诉我在Java中分类类别(例如从上到下类别)的最佳算法是什么?谢谢。
@Table
@Entity
public class Category {
@Id
Long id;
@ManyToOne
Category parent;
}
示例:
列表:
将像这样从上到下排序:
类别(id = 20)->类别(id = 11)->类别(id = 3)->类别(id = 4)
答案 0 :(得分:0)
假设您已列出。您可以使用Collections.sort();对列表进行排序。 但是您的类必须进行一些更改,因为您必须实现Comparable并重写compareTo()方法。这是一个例子,希望对您有帮助。
public class Category implements Comparable<Category>{
Long id;
Category parent;
// Constructors getters setters
public int compareTo(Category aux){
// Assuming you want to sort by parent's id, and I understand a category
// maybe doesn't have parent it may be null
if(aux.getParent() != null && this.parent != null){
if(aux.getParent().getId() > this.parent.getId()) return -1;
else if(aux.getParent().getId() < this.parent.getId()) return ;
return 0;
}
if(aux.getParent() == null && this.parent.getId() == null) return 0;
if(aux.parent() == null) return 1;
return 0;
}
}
答案 1 :(得分:0)
我看不到这里的排序方式。
这会为您提供所需的列表。
备注:
如果每个父母只有一个或没有一个孩子,您将得到一个示例中的列表。 (或多个列表),否则您将获得一棵树(或多个树)。
如果是“一个孩子或一个孩子”,则可以通过字段child
扩展类别,使其成为双重链接列表。在这种情况下,“搜索它的子项”变得很简单,因为您直接对其进行了引用。