我是新手。
我有以下 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”类;和一个节点...具有添加/查询节点的方法!

10-05 21:10