Lassen Sie uns eine Klasse in Java betrachtenFinden Sie die Hierarchie
class Entity {
Integer id;
Integer parentId;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
}
}
parentId Betrachten wie die Fremdschlüssel (bezieht sich auf ein anderes Objekt-ID).
Jetzt habe ich 6 Objekte erstellt und einige Werte eingegeben.
Entity e1 = new Entity();
e1.setId(400);
Entity e2 = new Entity();
e2.setId(300);
e2.setParentId(400);
Entity e3 = new Entity();
e3.setId(200);
e3.setParentId(300);
Entity e4 = new Entity();
e4.setId(100);
e4.setParentId(200);
Entity e5 = new Entity();
e5.setId(50);
e5.setParentId(100);
Entity e6 = new Entity();
e6.setParentId(50);
Jetzt möchte ich die Hierarchie der Objekte erhalten. Das heißt, wenn ich ID gebe, sollte ich die komplette Eltern-Hierarchie und Kind-Hierarchie erhalten.
für zB: wenn ich 100 als ID geben (Einheit: e4), soll ich die übergeordnete Hierarchie erhalten: - e4, e3, e2, e1 Child-Hierarchie: - e4, e5, e6
Erläuterung: - Für die übergeordnete Hierarchie: - Wir sollten zuerst das ursprüngliche e4-Objekt hinzufügen. dann werden wir das Objekt finden, dessen iD dasselbe ist wie das von e4 parentId (hier e3), wird der Prozess fortgesetzt, bis die Parent-ID null für die untergeordnete Hierarchie ist: - wir sollten zuerst das ursprüngliche e4-Objekt hinzufügen. dann werden wir das Objekt finden, dessen parentId dasselbe ist wie das der ID von e4. (Hier e5) der Prozess, bis weitergeht, ist die parentid null
Lösung von mir für Hierarchie parent: -
List<Entity> parent = new ArrayList<Entity>();
Entity ent = list.stream().filter(e -> e.getId() == 100).findFirst()
.get(); // // 100 input id value
parent.add(ent);
Integer parentId = ent.getParentId();
while (parentId != null) {
int search = parentId;
Entity newEntity = list.stream().filter(e -> e.getId() == search)
.findFirst().get();
parent.add(newEntity);
parentId = newEntity.getParentId();
}
für Kind-Hierarchie:
Entity entnew = list.stream().filter(e -> e.getId() == 100).findFirst()
.get(); // 100 input id value
child.add(entnew);
Integer idNew = entnew.getId();
while (idNew != null) {
int searchNew = idNew;
Entity newEnt = list.stream().filter(f -> f.getParentId()!= null && f.getParentId() == searchNew)
.findFirst().get();
child.add(newEnt);
idNew = newEnt.getId();
}
ich diese Methode gefunden um das Szenario zu lösen, aber ich möchte eine effizientere Lösung in Java 8 mit seinen Kernkonzepten, um dies zu lösen.
ist es ein Grund, warum Sie "parentId" statt Verweis auf Eltern halten? – user902383