- 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 } ] } ]