2015-09-11 2 views
3

Как вы перебираете список, в котором есть «parent/child/grandChild/etc.»?Java Iterate Over List

Образец данных:

{ID, Parent ID}

Object parent = {1, 0}; 
Object childA = {2, 1}; 
Object childB = {3, 1}; 
Object grandChildA = {4, 3}; 
Object grandChildB = {5, 2}; 

И этот список будет, {parent, childA, childB, grandChildA, grandChildB}

Как вы итерацию его "корни"?

Пример вывода:

  • Родитель
    • childâ
      • GrandChildB
    • ChildB
      • Grandchild

Спасибо!

Образец данных:

Конструктор SampleObject(int id,int parentId)

SampleObject parent = new SampleObject(1, 0); 
SampleObject childA = new SampleObject(2, 1); 
SampleObject childB = new SampleObject(3, 1); 
SampleObject grandChildA = new SampleObject(4, 3); 
SampleObject grandChildB = new SampleObject(5, 2); 

Затем я поместил объекты в ArrayList: ArrayList testList

так, проблема в том, как пройти по списку, так что в результате получится:

  • Родитель
    • childâ
      • GrandChildB
    • ChildB
      • GrandChildA
+5

Почему бы не показать нам, как * Вы * пробовали? –

+0

Рекурсия была бы довольно простым решением в этом случае. – SomeJavaGuy

+1

Возможный дубликат [Java-структуры данных дерева?] (Http: // stackoverflow.com/questions/3522454/java-tree-data-structure) – StarShine

ответ

2

я рекомендую Структура данных древовидная, такие как:

package com.stackoverflow.test; 

import java.util.ArrayList; 
import java.util.List; 

public class TreeNode { 
    private String   name  = ""; 
    private List<TreeNode> childNodes = new ArrayList<TreeNode>(); 

    public TreeNode(final String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public void add(final TreeNode child) { 
     childNodes.add(child); 
    } 

    public List<TreeNode> getChildren() { 
     return this.childNodes; 
    } 

    public static void main(String[] args) { 

     TreeNode parent = new TreeNode("Parent"); 

     TreeNode childA = new TreeNode("ChildA"); 
     childA.add(new TreeNode("GrandChildA")); 

     TreeNode childB = new TreeNode("ChildB"); 
     childB.add(new TreeNode("GrandChildB")); 

     parent.add(childA); 
     parent.add(childB); 

     TreeNode.printRecursively(parent, 0); 
    } 

    private static void printRecursively(final TreeNode root, final int level) { 
     if (null != root && null != root.getChildren()) { 

     for (int i = 0; i < level; ++i) { 
      System.out.print(" "); 
     } 

     System.out.println(root.getName()); 

     for (TreeNode child: root.getChildren()) { 
      TreeNode.printRecursively(child, level + 1); 
     } 
     } 
    } 

} 

Напечатает:

Parent 
    ChildA 
     GrandChildA 
    ChildB 
     GrandChildB