我是收藏品的新手。 我有以下课程
class ParantCategory {
int id;
String name;
int pid;
public ParantCategory(int id, String name, int pid) {
this.id = id;
this.name = name;
this.pid = pid;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
}
我的主要方法类是
public class HierachiDemo {
static ArrayList<ParantCategory> al = new ArrayList<>();
public static void main(String[] args) {
al.add(new ParantCategory(1, "000", 0));
al.add(new ParantCategory(2, "A1", 1));
al.add(new ParantCategory(3, "B1", 1));
al.add(new ParantCategory(4, "A11", 2));
al.add(new ParantCategory(5, "A12", 2));
al.add(new ParantCategory(6, "A13", 2));
al.add(new ParantCategory(7, "B11", 3));
al.add(new ParantCategory(8, "B12", 3));
al.add(new ParantCategory(9, "B13", 3));
al.add(new ParantCategory(10, "A111", 4));
al.add(new ParantCategory(11, "A112", 4));
al.add(new ParantCategory(12, "A113", 4));
HierachiDemo h = new HierachiDemo();
//function call here
}
}
我在arraylist中存储了元素。 现在我的问题是我需要递归函数,因为我将传递Name,它会给我所有来自n个级别的孩子。 例如: 如果我将A1作为名字传递,那么它应该给我所有的孩子,比如A11,A12,A13,以及是否还应该显示A11,A12,A13的子项。 我需要最终结果为A11,A12,A13,A111,A112,A113。
答案 0 :(得分:3)
轻松蛮力&#34;解决方案是:
List<ParantCategory> matches = new ArrayList<>();
for (ParantCatagory parant : al) {
if (parant.getName().startsWith("A1")) {
matches.add(al);
}
}
您也可以使用简单的过滤器来使用Java8流。
当然,这适用于这种简单的字符串比较。 你必须澄清的关键是什么这样的&#34;孩子&#34;关系实际上意味着给你。在您的示例中,您只需告诉我们您考虑&#34; A112&#34;成为&#34; A1&#34;
的孩子因此,要解决您的评论:如果您要实施真正的层次排序,那么您必须在代码中表达。含义:您可能需要创建自己的树实现;在您添加对象的位置,以及您编写的代码的基础上,您的树命令元素在这样的&#34;子类&#34;类别。
换句话说:您当前的代码对字符串做出简单的假设。如果你需要更复杂的东西;那么,你必须实现这一点。你必须采取的第一步:自己澄清如何定义这种关系。这是我们无法帮助的事情!
换句话说:现在,您只拥有该Parant类的对象。这些对象之间的关系绝对没有。如果你想要这样的关系,你必须为你的班级添加手段来表达它们!例如,将您的班级更改为&#34; Node&#34;类;和Node ...有添加/查询子节点的方法!
答案 1 :(得分:1)
如果你想坚持当前的结构。您可以创建一个满足您需求的方法。有两件事,
weblogic.security.spi.WLSUser
}
我们可以为孩子们制作递归方法。
List<ParantCategory> getChildNodes(String name, int levels){
List<ParantCategory> results = new ArrayList<>();
ParantCategory head = null;
//assuming there is only one ParantCategory with the supplied name.
for(ParantCategory p: al){
if(name.equals(al.getName())){
head = al;
break;
}
}
//if we cannot find the name just use an empty list.
if(head==null) return results;
results.add(head);
results.addAll(getChildren(head.getPid(), levels));
return results;