java更新列表中的所有子项

时间:2015-06-09 07:47:41

标签: java recursion stream

所以,让我们说我有一个彼此相关的人员名单,每个人都包含他们自己的家谱。

public class Person {
  private int id;
  private String name;
  private List<Integer> ancestorIds;
  private int parentId;
  //getters and setters
}

所以,让我说我的列表如下:

List<Person> persons = new ArrayList<Person>();
persons.add(new Person(3,"grandpa", {}, null));
persons.add(new Person(4,"pa", {3,4},3));
persons.add(new Person(5,"uncle", {3,5},3));
persons.add(new Person(7,"me", {3,4,7},4));

但是现在我们知道我的爷爷他的父亲实际上是id为1的那个..我需要更新清单..我怎么能这样做,记住我需要按行更新..所以首先我的爷爷..然后拿走他的祖先名单并把它交给我的父亲和叔叔(也加上他们的ids)。然后我把我的pa列表加入我。我想我需要一些递归方法。

提前致谢

2 个答案:

答案 0 :(得分:0)

如果您对此数据结构进行更改,如果您让每个人仅指向它的直接祖先,那么它将更灵活。然后按需构建树。 你在问题中提到的方式,如果树没有改变,我会用。

答案 1 :(得分:0)

您是否被迫使用此表示法?家族树更有意义引用人,特别是Person类被定义为:

public class Person {
      private int id;
      private String name;
      private List<Person> ancestors;
      private int parentId;
      //getters and setters
    }

如果以这种方式完成,除了你的曾祖父外,你不需要更新任何东西。实际上,逐行执行并不是一个强大的解决方案,因为存在错误的空间(如果您错过了一个ID),并且您应该避免这种情况,以获得良好的设计。更糟糕的是,除非你保留背景(即有后代和祖先),否则没有有效的方法来更新树下的祖先。