JAVA急速にビルドツリー

  • JDK 1.8+
  • 0のPIDにノードがルートノードであります
パブリック クラスノード{
     プライベート int型のID。
    プライベート int型のPID;
    プライベート文字列名;
    プライベートリスト<ノード>サブ= 新しい ArrayListを<> ();
    パブリックノード(int型の ID、INT PID){
         この .ID = ID。
        このを.pid = PID;
    }

    パブリックノード(int型の ID、INT PID、文字列名){
         この(ID、PID)。
        この .nameの= 名前;
    }

    公共 INT のgetId(){
         戻りID。
    }

    公共 ボイド SETID(int型のID){
         この .ID = ID。
    }

    公共 INT GETPID(){
         戻りPID。
    }

    公共 ボイド setPid(INT PID){
         これを.pid = PID。
    }

    パブリック文字列のgetName(){
         戻り名。
    }

    公共 ボイドのsetName(文字列名){
         この .nameの= 名前。
    }

    パブリックリストの<node> getSub(){
         戻り副。
    }

    公共 ボイド setSub(リストの<node> サブ){
         この .SUB = 副。
    }
}
パブリック クラスTreeUtil {
     パブリック 静的リスト<ノード> buildTree(リストの<node> ノード){
        地図 <整数、リスト<ノード>>サブ= nodes.stream()フィルタ(ノード- > node.getPid()!= 0).collect(Collectors.groupingBy(ノード- 。> node.getPid()));
        nodes.forEach(ノード - > node.setSub(sub.get(node.getId())))。
        リターン。nodes.stream()フィルタ(ノード- > node.getPid()== 0 ).collect(Collectors.toList())。
    }
}
パブリック クラスメイン{
     公共 静的 ボイドメイン(文字列[]引数){
        ノードデニス = 新しいノード(1、0、 "デニス" )。
        ノード穏やか = 新しいノード(2、0、 "冷静" );
        ノード娘 = 新しいノード(3、1、 "娘" );
        ノードの孫 = 新しいノード(4,3、「孫」)。
        ノードの息子 = 新しいノード(5、2、 "息子" );
        一覧 <ノード>ノード= Lists.newArrayList(デニス、穏やかな、娘、息子、孫);
        リストの<node>ツリー= TreeUtil.buildTree(ノード)。
        System.out.println(JSON.toJSONString(木));
    }
}
[
  {
    "ID":1  "名前" "デニス"  "PID":0  "サブ" :[
      {
        "ID":3  "名前": "娘"  "PID":1  "サブ" :[
          {
            "ID":4  "名前" "孫"  "PID":3
          }
        ]
      }
    ]
  }、
  {
    "ID":2  "名称": "穏やか"  "PID":0  "サブ" :[
      {
        "ID":5  "名": "息子"  "PID":2
      }
    ]
  }
]

 

おすすめ

転載: www.cnblogs.com/huangjinyong/p/12383315.html