2014-09-11 2 views
1

На следующем рисунке показано, как нужно мои данные будут храниться и связаны друг с другом:Сохранение значения строки с четырьмя уровнями иерархии

Значения v1, v2 и так далее являются уникальными. Av1 ... n и n1 .... n пара должна быть одинаковой для разных v1 ... n. После сохранения мне необходимо получить его в следующем формате:

V1,Av1,n1 
V1,Av1.n2 
. 
. 
. 
. 
v4,Av1,n1 

Как вы предлагаете мне это делать?

+0

Я предполагаю, что вы можете использовать xml –

ответ

0

Используйте древовидный класс для хранения имени дерева и его дочернего элемента. Затем перебираем рекурсивную логику и печатаем ее.

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

class Tree{ 
    private List<Tree> childTree; 
    private String name; 

    public Tree(String name) { 
     this.name = name; 
    } 

    public List<Tree> getChildTree() { 
     return childTree; 
    } 

    public void setChildTree(List<Tree> childTree) { 
     this.childTree = childTree; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

public class TestDrive { 

    public static void main(String arr[]){ 

     //Storing the values 
     Tree a1 = new Tree("A1"); 

     Tree v1 = new Tree("v1"); 
     Tree v2 = new Tree("v2"); 

     List<Tree> a1Child = new ArrayList<Tree>(); 
     a1Child.add(v1); 
     a1Child.add(v2); 

     a1.setChildTree(a1Child); 

     Tree av1 = new Tree("av1"); 
     Tree av2 = new Tree("av2"); 

     List<Tree> v1Child = new ArrayList<Tree>(); 
     v1Child.add(av1); 
     v1Child.add(av2); 

     v1.setChildTree(v1Child); 

     Tree n1 = new Tree("n1"); 
     Tree n2 = new Tree("n2"); 

     List<Tree> av1Child = new ArrayList<Tree>(); 
     av1Child.add(n1); 
     av1Child.add(n2); 

     av1.setChildTree(av1Child); 

     Tree n11 = new Tree("n1"); 
     Tree n22 = new Tree("n2"); 
     List<Tree> av2Child = new ArrayList<Tree>(); 
     av2Child.add(n11); 
     av2Child.add(n22); 

     av2.setChildTree(av2Child); 

     //Retrieving the values 

     printValue(a1,""); 

    } 

    private static void printValue(Tree tree,String treeName) { 
     treeName = treeName+" : "+tree.getName(); 

     if(tree.getChildTree()!=null){ 
      List<Tree> childTreeList = tree.getChildTree(); 
      for (Tree childTree : childTreeList) { 
       printValue(childTree,treeName); 
      } 
     }else{ 
      System.out.println(treeName); 
     } 
    } 

} 
+0

Это действительно работает для печати этих значений, и оно идеально подходит. Я должен передать каждую строку этих 4 значений в sql-запрос для всех комбинаций, чтобы найти, существует ли в базе данных. Как это сделать? (На самом деле новичок в этом). – Leocode

+0

@Leocode Чтобы выполнить запрос выбора, вам нужно найти комбинацию узлов дерева. Рекурсивный аргумент 'treeName' является ключевым здесь, поскольку он содержит комбинацию. Я использовал ':' для объединения имен деревьев. Вы можете достичь своего требования, разделив «treeName» в том месте, где я его печатаю '(System.out.println (treeName);)', и поговорить с базой данных. Вместо аргумента 'String' вы также можете передать' ArrayList ' и манипулировать им. Есть много способов решить эту проблему, это всего лишь идея, надеюсь, что это поможет :) – vjy

+0

Я не знаю, является ли это лучшим ответом или наиболее оптимальным решением, которое возможно, но я принимаю его, потому что он отлично работает для меня. Огромное спасибо. – Leocode

Смежные вопросы