У меня есть некоторые данные с сервера, который выглядит следующим образом. Каждая строка представляет собой массив, поэтому данные поступают в виде массива массивов:
net Person age
net Person height
net Address streetname
org Company name
org Company location
com School color
com School number
Слева направо, я перебираю массив с двумя циклами for и строю древовидную структуру каждой строки (каждый элемент является родителем своего последователя), как показано ниже. После каждого внутреннего цикла я добавляю это конкретное дерево (похожее на строку) в ArrayList. Таким образом, каждый объект в ArrayList похож на дерево. Как вы можете видеть ниже.
+net
Person
age
+net
Person
height
+net
Address
streetname
+org
Company
name
+org
Company
location
+com
School
color
+com
School
number
Это мой главный вопрос
После того, как я добавил первый объект в ArrayList, я хотел бы сравнить последующие объекты, чтобы избежать дублирования. Как вы можете видеть, «Person» и «Address» имеют одну и ту же родительскую «net», поэтому я хотел бы, чтобы оба были под одним и тем же родителем, чтобы была одна «net». Вы также можете видеть, что у «age» и «height» также есть один родительский «Person», я хочу, чтобы оба указали «Person». «Компания» будет находиться под единым «org», а их дочерние «name» и «location» будут находиться в «Company».
Как я могу сравнить их, чтобы добиться такого поведения?
Я реализовал древовидную структуру в форме, похожей на связанный список, как вы уже заметили.
//SUPER CLASS
public class Model {
protected String name;
protected Model parent = null;
protected ArrayList<Model> children;
public Model(String name ){
this.setName(name);
children = new ArrayList<Model>();
}
public void addChild(Model node) {
children.add(node);
}
public ArrayList<Model> getChildren() {
return children;
}
}
// SUBCLASSES
public class cPackage extends Model{
public cPackage() {
super();
}
}
public class cClass extends Model{
public cClass () {
super();
}
}
public class cMethod extends Model{
public cMethod () {
super();
}
}
Каждый элемент в строке принадлежит одному из этих подклассов. Каждый уровень дерева принадлежит одному и тому же классу.
Мой главный вопрос теперь заключается в том, как я могу их эффективно сравнить и привести требуемые объекты под их соответствующих родителей?
Пожалуйста, мне нужны ваши идеи. Если есть код, я буду признателен, если вы добавите его в свои предложения или укажете на него.
Спасибо всем.