我是新手。
我有以下 class
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。
最佳答案
一个简单的“蛮力”解决方案是:
List<ParantCategory> matches = new ArrayList<>();
for (ParantCatagory parant : al) {
if (parant.getName().startsWith("A1")) {
matches.add(al);
}
}
您也可以将Java8流与简单的过滤器结合使用。
当然,这适用于这种简单的字符串比较。 您必须澄清的关键是,这种这样的“孩子”关系实际上是对您来说意味着什么。在您的示例中,您只是简单地告诉我们,您认为“A112”是“A1”的子代。
因此,要解决您的评论:如果要实现真正的分层排序,则必须在代码中表示。含义:您可能不必创建自己的树实现;在您添加对象的位置以及您编写的代码的基础上,树将此类“子类”类别中的元素排序。
换句话说:您当前的代码对字符串进行了简单的假设。如果您需要更复杂的东西;好吧,那么您必须来实现它。而且,您必须采取的第一步:亲自说明如何定义这种关系。我们无能为力!
换句话说:现在,您只有该Parant类的对象。而且这些对象之间彼此之间绝对没有或关系。如果您想要这样的关系,则必须在 class 中添加表达方式!例如,通过将您的类更改为“Node”类;和一个节点...具有添加/查询子节点的方法!