Объект класса "Shape" имеет свой собственный идентификатор, но при желании может иметь свои родительские фигуры (только один родительский) и дочерние фигуры (может иметь несколько). Мне нужно найти все подключенные узлы. где все дочерние узлы должны находиться под одним основным родительским узлом, т. е. если текущий узел имеет как родительский, так и дочерний узлы, то дочерние узлы текущего узла будут принадлежать списку дочерних узлов родительского (текущего узла родителя).
class Shape {
String parentShapeId;
String shapeId;
List<String> childShapeIdList = new ArrayList<>();
public Shape(String shapeId, String parentShapeId, List<String> childShapeIdList) {
this.shapeId = shapeId;
this.parentShapeId = parentShapeId;
this.childShapeIdList = childShapeIdList;
}
}
, например: из следующих экземпляров форма "1" будет родительской, а список дочерних узлов будет содержать [ 2,3,4,5,6,7,8,9], родительская форма «11» будет иметь дочерний узел [12], родительская форма 15 будет иметь дочерний узел [16].
Shape a = new Shape("1", "", Arrays.asList("2", "3", "4"));
Shape b = new Shape("2", "1", Arrays.asList("5", "6", "7"));
Shape c = new Shape("6", "2", Arrays.asList("8", "9"));
Shape d = new Shape("10", "", Arrays.asList());
Shape e = new Shape("13", "", Arrays.asList());
Shape f = new Shape("14", "", Arrays.asList());
Shape g = new Shape("11", "", Arrays.asList("12"));
Shape h = new Shape("15", "", Arrays.asList("16"));
LinkedHashSet<Shape> shapeSet = new LinkedHashSet<>();
shapeSet.add(a);
shapeSet.add(b);
shapeSet.add(c);
shapeSet.add(d);
shapeSet.add(e);
shapeSet.add(f);
shapeSet.add(g);
shapeSet.add(h);
Я пытался использовать deque, set, list et c для итерации по экземплярам для создания окончательной родительской дочерней фигуры. но я получаю исключение одновременной модификации, исключение nullpointer et c. ошибки. Я использую Java. любое предложение будет очень полезно.