2014-01-28 2 views
2

У меня есть список строк в следующем формате:Создание структуры дерева из списка строк

"levelone.two.three" 
"levelone.two.three.node(0)" 
"levelone.two.three.node(1)" 
"levelone.another" 
"aaa.bbb(0).ccc" 
"aaa.bbb(1).aaa" 

и т.д.,

Как я мог манипулировать это таким образом, которым я мог бы итерацию и генерировать HTML дерево от этого?

например:

  • LevelOne
    • два
      • три
        • узел 0
        • узел 1
    • другое
  • ааа
    • БББ 0
      • ссс
    • БББ 1
      • ааа

ответ

2

разметить ваши строки так есть

[ «LevelOne», «два», «три»] и т.д.

а затем слева направо, попробуйте вставить ее в дереве сохранения текущего узла дерева, чтобы вставить at, начиная с корневого узла. Если данный узел имеет ваш узел для вставки, не делайте ничего, иначе вставьте его.

1

Это должно дать вам полное представление о том, как достичь этого.

Примечание: Производительность и фактическая реализация, вам нужно сделать сами. Я только что ввел код здесь

String[] testData = new String[] { "levelone.two.three", "levelone.two.three.node(0)", 
       "levelone.two.three.node(1)", "levelone.another", "aaa.bbb(0).ccc", "aaa.bbb(1).aaa" }; 

List<String[]> splitData = new ArrayList<String[]>(); 
for (String data : testData) { 
    splitData.add(data.split("\\.")); 
} 

Map<Integer, Set<String>> treeMap = new LinkedHashMap<Integer, Set<String>>(); 

for (String[] split : splitData) { 
    for (int i = 0; i < split.length; i++) { 
     if (treeMap.get(i) != null) { 
      treeMap.get(i).add(split[i]); 
     } else { 
      Set<String> data = new LinkedHashSet<String>(); 
      data.add(split[i]); 
      treeMap.put(i, data); 
     } 
    } 
} 
System.out.println(treeMap); 
// {0=[levelone, aaa], 1=[two, another, bbb(0), bbb(1)], 2=[three, ccc, aaa], 3=[node(0), node(1)]} 

Конечная карта содержит данные каждый уровень с его индексом в качестве ключевого

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