2015-09-08 4 views
0

Мне нужно создать древовидное представление табличного источника данных, и мне трудно начать работу. Данные представление продукта иерархийСоздание дерева Java из текстового ввода

Input Data

Структура дерева с этого входа будет выглядеть следующим образом:

enter image description here

До сих пор я написал метод в Java, который считывает текстовый ввод (TSV) и генерирует массив 2d String из значений. Отсюда я не уверен, как действовать дальше. Класс массива, как представляется, не имеет методов, которые мне нужны для определения отношений или добавления узлов в дерево.

Java код:

public class ImportTSV { 
// Global VARs 
String[][] tsvArray; 
List<String> lines; 

public static void main(String[] args) throws IOException{ 
    ImportTSV tsv = new ImportTSV(); 
    String [][] tmp = tsv.readTSV(); 
    tsv.arr2tree(tmp); 
} 

public String[][] readTSV() throws IOException{ 
    // Read File to lines object 
    lines = Files.readAllLines(Paths.get("Input\\TestData_small.txt"), StandardCharsets.UTF_8); 

    // Set Array bounds to # of lines in input source 
    tsvArray = new String[lines.size()][]; 

    System.out.println("-- Full 2D Array --"); 
    // Build the array from TSV source 
    for(int i=0; i<lines.size(); i++){ 
     tsvArray[i] = lines.get(i).split("\t"); 
     System.out.println(Arrays.deepToString(tsvArray[i])); 
    }  
    return tsvArray; 
} 

public void arr2tree(String[][] arr){ 
    String[][] data = arr; 
    String[] tmp = null; 
    System.out.println(" "); 
    System.out.println("-- Converting to Tree --"); 

    // Need a tree 
    TreeMap<String, String> tm = new TreeMap<String, String>(); 

    // Loop through [][] to define each line 
    for(int i=0;i<data.length;i++){ 
     // Then seperate by record 
     for(int j=0;j<data[i].length-1;j++){ 
      // Set comparison variables 
      String s1 = data[i][j]; 
      String s2 = data[i][j+1]; 

      // See the comparison 
      System.out.println("Parent Check: " + s1); 
      System.out.println("Child Check: " + s2); 


      // Set the relationship in the tree if it doesnt exist 
      if(tm.(s1)!=s2){ 
       tm.put(s1, s2); 
       System.out.println(tm.toString()); 
      } 


     }   
    }  
} 

}

Я довольно новыми для Java и ценим любую помощь с решением этой проблемы.

+0

Это очень похоже на вопрос «сделайте мою домашнюю работу для меня». Я предлагаю задуматься о следующих шагах и сделать еще одну попытку. Если у вас возникли определенные проблемы с логикой или заставить ее работать, отправьте сообщение еще раз. – rodamn

ответ

0

Для начала, вероятно, было бы целесообразно реализовать Node, что вы можете хранить отношения в.

Here хороший пример из другого вопроса.

public static class Node<T> { 
    private T data; 
    private Node<T> parent; 
    private List<Node<T>> children; 
} 

В вашем случае вы, вероятно, можете изменить тип T к String и так как вы не сказали, если родители зафиксировали число детей List также подходит для вас.

+0

Спасибо, поэтому я хотел бы определить узел, итерации через мой массив, а затем сохранить его на карте? – user3549661

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