1

データベースから取得したこのデータを取得し、それをツリーに変換したいと考えています。

データ:

お母さんの息子のお母さんテキストの息子テキスト
1 2 メインレベル 1
2 4 レベル1 レベル2
4 5 レベル2 レベル3
4 7 レベル2 レベル3
1 8 メインレベル 1
8 9 レベル1 レベル2


コード:

List<String[]> testList=new ArrayList<String[]>();;
String[] test1={"1","2","Main","Level1"};
String[] test2={"2","4","Level1","Level2"};
String[] test3={"4","5","Level2","Level3"};
String[] test4={"4","7","Level2","Level3"};
String[] test5={"1","8","Main","Level1"};
String[] test6={"8","9","Level1","Level2"};

testList.add(test1);
testList.add(test2);
testList.add(test3);
testList.add(test4);
testList.add(test5);
testList.add(test6);

HashMap<String, List<String[]>> myHashMap = new HashMap<String, List<String[]>>();
for(int i=0; i<testList.size(); i++){
    String[] test=testList.get(i);
    String parent=test[0];
    List<String[]> children = myHashMap.get(parent);
    if (children == null){
        children = new ArrayList<String[]>();
        myHashMap.put(parent,children);                     
    }
    children.add(test);
}
Tree myTree=new Tree();
String node=testList.get(0)[0];
printTree(node, myTree, myHashMap);

「printTree」というメソッドもあります

public void printTree(String node, Tree myTree, HashMap<String, List<String[]>> myHashMap){
    CheckBox nodeCheckBox=new CheckBox(node);
    TreeItem root = new TreeItem(nodeCheckBox);
    myTree.addItem(root);

    if(myHashMap.containsKey(node)){
        List<String[]> testList=myHashMap.get(node);

        for(int i=0; i<testList.size(); i++){
            String nextNode=testList.get(i)[1];
            printTree(nextNode, myTree, myHashMap);
        }

    }
}

実行後、出力は次のようになりますが、これは正しくありません。
ここに画像の説明を入力


結果を次のようにしたい:
ここに画像の説明を入力

printTree 関数を機能させるには、少し変更する必要があると思います。

注 1: 私のコーディング方法が気に入らない場合は、自由に独自のソリューションを提供してください。ただし、このオブジェクトのデータを使用してくださいList<String[]> testList

注 2: テキスト (momText & sonText) 列について心配する必要はありませんが、数値 (mon & son ) 列を操作するだけで、文字列配列を介してテキストに簡単にアクセスできます。

4

2 に答える 2

2

すでに @cyon を説明しているツリー アイテムを返す必要があります。次に、text のメソッドで表示テキストを渡します。

public TreeItem printTree(String node,  HashMap<String, List<String[]>> myHashMap,String displayText){
             CheckBox nodeCheckBox=new CheckBox(displayText);
              TreeItem root = new TreeItem(nodeCheckBox);
              root.setState(true);
              if(myHashMap.containsKey(node)){
                  List<String[]> testList=myHashMap.get(node);

                  for(int i=0; i<testList.size(); i++){
                     String nextNode=testList.get(i)[1];
                     TreeItem child = printTree(nextNode, myHashMap,testList.get(i)[3]);
                     root.addItem(child);
                     root.setState(true);
                  }

               }
               return root;
        }

そして、あなたのメソッドを次のように呼び出します

Tree myTree=new Tree();
    String node=testList.get(0)[0];
    myTree.addItem(printTree(node, myHashMap,testList.get(0)[2]));
于 2013-05-16T09:02:50.563 に答える
1

を渡す代わりに、次のように再帰メソッドからTree返すことができますTreeItem

public TreeItem createTree(String node, HashMap<String, List<String[]>> myHashMap){
  CheckBox nodeCheckBox=new CheckBox(node);
  TreeItem root = new TreeItem(nodeCheckBox);

  if(myHashMap.containsKey(node)){
      List<String[]> testList=myHashMap.get(node);

      for(int i=0; i<testList.size(); i++){
         String nextNode=testList.get(i)[1];
         TreeItem child = createTree(nextNode, myHashMap);
         root.addItem(child);
      }

   }
   return root;
}

そして、コードの主要なビットでは、ルートをツリーに追加するだけです

Tree myTree=new Tree();
String node=testList.get(0)[0];
myTree.addItem(createTree(node, myHashMap));
于 2013-05-16T08:43:27.280 に答える