データ構造、搬送機構ツリーのリストを変換します

夜に転送スキームのリストツリーをたくさん読んで、私は非常に良いではない感じ、書くためにこの時間は、と共有する、独自の出し

私は、非常に良いと感じたコードに直接話します

図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、それ。

     あなたが任意のより良いオプションがある場合、あなたは私にメッセージハを与えることができます!

おすすめ

転載: www.cnblogs.com/see-saw/p/12125746.html