2016-09-19 4 views
1

ListNodesには、ネストされたリストchild nodesが含まれています。私は特定のノードを見つけるためにそれらのすべてを反復しようとしています。現在rootレベルからchild nodesで始まり、次にsub child nodeに1レベル深く進み、for-eachループを使用します。 これは私のコードです:繰り返し中のコレクションの交換

List<Node> children = root.getChildren(); 
    boolean found = false; 

    while (!found) { 

     for (Node node : children) { 

      if (!node.getData().toString().toUpperCase().contains("BRANCH")) { 
       if(condition){//some processing} 
       } else { 
        //swap children with sub children 
        if (children.get(0) != null) { 
         children = children.get(0).getChildren(); // this operation is not possible during iteration 
        } 
       } 
      } else { 
       continue; 
      } 
     } 

    } 

} 

child nodeは、任意の一致が見つからない場合は、その後、私はそうでsub child nodeでコレクションを交換し、反復を継続してする必要があります。 入れ子になったnodelistの子供を反復処理するより良い方法はありますか?

+0

これは、XYの問題のように思えます。私は再帰を提案しますが、実際に何をしようとしているのかは不明です。 –

+0

@JornVernee:私はarraylistからJava階層ツリーを作成し、後でjson(gson)に変換してWebページにレンダリングしようとしていました。 –

答えて

1

コレクションを交換する代わりに、キューに要素を追加して、キューが空になるまで繰り返します(一致しなかった場合)。または、あなたはマッチを見つけて、早く帰ります。

public static void algorithm(Node root) { 
    Queue<Node> q = new LinkedList<>(); 
    q.add(root); 

    while(!q.isEmpty()) { 
     Node current = q.poll(); 

     if(current .getData().toString().toUpperCase().contains("BRANCH")) { 
      continue; 
     } 

     if(condition){ 
      //some processing 
      return; 
     } else { 
      q.addAll(current.getChildren()); 
     } 
    } 
} 
algorithm(root); 
+0

それはまさに私が望んでいたものでした。完璧に働いた。ありがとう! –

0

この中間のようにスワップすることはできません。

for (Iterator<Node> it = children.iterator(); it.hasNext();) { 
    Node node = it.next(); 
    // The rest of it 
} 

ですから、childrenが何であるかを変更しても、あなたのイテレータがそのままとどまる:あなたのforループは、次のようにJavaで翻訳されていることを覚えておいてください。

ここではQueueをお勧めします。

PS最初の子供以外の子供をすべてスキップしますか?それはあなたが現在やっているようです。

+0

@ Joe C:それも私が思ったことです。また、木は巨大で、実際には複雑になっていく。私はあなたが述べたように別のアルゴリズムを使用する必要があると思います。私はちょうど最初の子供とそのすべての子の論理が他の子供に入る前に仕事になるようにしようとしています。私はすべての兄弟をカバーするためにforループや何かを使わなければならないかもしれません。しかし、それはすでに悪夢です。笑 –

関連する問題