夜に転送スキームのリストツリーをたくさん読んで、私は非常に良いではない感じ、書くためにこの時間は、と共有する、独自の出し
私は、非常に良いと感じたコードに直接話します
図1に示すように、オブジェクトの種類
@data パブリック クラス SystemAuth 実装Serializableを{ / ** *許可ID * / プライベート整数AUTHID; / ** *親の許可ID * / プライベート整数PARENTID; / ** *セットリストサブ許可ID * / プライベートリスト<SystemAuth> 子供; }
オブジェクトが開始されると、のParentID後にのみAUTHID、同様のParentID、ビルドツリーは現在のAUTHIDのすべてのIDリストに子どもの権利の集合で、というようになります。
直接法の本質の内側に木の2.建設
//クエリデータベースは、リストをチェックアウトすると、成果のセット必要と セット<SystemAuth> authIdsAndAuthType = systemAuthMapper.findAuths(); //リストを作成し、すべての最上位ノードホールド 一覧<SystemAuth>一覧=新しい新しいのArrayListを<>(); //構築ツリーのすべてのノードを格納するために使用されるマップを作成し、親ノードが容易に見つけることができる )最終のHashMap <整数、SystemAuth> =新しい新しいマップHashMapを<>(; //ソートデータは、親配列の行IDに応じて、優先度を保証親ノードのプロセスは、親による子のチェックは、常に存在する場合(エッセンス) authIdsAndAuthType.stream()ソート((S1、S2) - > s1.getParentid() - s2.getParentid())。 .forEach(アイテム- > { 現在のノードに//マップ、ノードがよく使用して見つけることができ、子ノード map.put(item.getAuthid()intValue()、アイテム。); //現在のノードの親ノードを取得し、 = parentitemとしてmap.get SystemAuth(item.getParentid()intValue()); //親ノードが存在する (parentitem = NULL!)場合は{ 、親ノードリストを作成していないとき//噴火は、リストを作成 IF(parentitem.getChildren()== NULL){ parentitem.setChildren(新しい新しいのArrayList <SystemAuth>()); } //下のノードの親ノードに入れ parentitem.getChildren()を追加します(項目);. }他{ 親ノードが存在しない場合、あなたが存在しない場合、それはトップレベルノードでなければならないことを確認することができ、ソートされているように//、ノードは、最上位ノードに入れられます。 List.add(項目); } });
戻り値のリスト
行われ、本発明の方法は、選別サイクルを使用します。
そして、最も重要なのは、オブジェクトで満たされているリスト、およびマップオブジェクトは、子ノードを保存するときに、あなたがそれを保証することができ、リスト内の親ノードがマップの親ノード同期表情の下に格納され、同じオブジェクトと一緒にインストールされています、最終的なリターンは、ルート・ノードを一覧表示するには、すべてのオブジェクトがあり、OK、それ。
あなたが任意のより良いオプションがある場合、あなたは私にメッセージハを与えることができます!!!!