package com.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestService {
static Map<String, String> mapN = new HashMap<String, String>();
static int max_depth = 0;
public static void main(String[] args) {
List<List<String>> data = getData();
System.out.println(data);
Map<String, List<String>> mapP = new HashMap<String, List<String>>();
for (int i = 0; i < data.size(); i++) {
List<String> rows = data.get(i);
if(mapP.get(rows.get(2)) != null){
List<String> listC = mapP.get(rows.get(2));
listC.add(rows.get(0));
mapN.put(rows.get(0), rows.get(1));
} else {
List<String> listC = new ArrayList<String>();
listC.add(rows.get(0));
mapN.put(rows.get(0), rows.get(1));
mapP.put(rows.get(2), listC);
}
}
List<List<String>> level_list = new ArrayList<List<String>>();
List<List<String>> final_list = new ArrayList<List<String>>();
List<String> first_level = mapP.get("0");
List<String> this_level_list = new ArrayList<>();
loopingLowerLevel(first_level, mapP, 1, level_list, this_level_list);
for(int i = 0; i < level_list.size(); i++){
List<String> list = level_list.get(i);
for(int j = 0; j < max_depth; j++){
if(j >= list.size()){
if(i == 0){
List<String> list_d = new ArrayList<>();
list_d.add("");
final_list.add(list_d);
} else {
List<String> list_dd = final_list.get(j);
list_dd.add("");
final_list.set(j, list_dd);
}
} else {
if(i == 0){
List<String> list_d = new ArrayList<>();
list_d.add(list.get(j));
final_list.add(list_d);
} else {
List<String> list_dd = final_list.get(j);
list_dd.add(list.get(j));
final_list.set(j, list_dd);
}
}
}
}
for(int finall = 0; finall < final_list.size(); finall++){
System.out.println(final_list.get(finall));
}
}
private static void loopingLowerLevel(List<String> low_level_list, Map<String, List<String>> mapP, int level, List<List<String>> level_list, List<String> tree){
for(int i = 0; i < low_level_list.size(); i++){
List<String> another_level_list = mapP.get(low_level_list.get(i));
List<String> this_level_list = new ArrayList<>(tree);
this_level_list.add(mapN.get(low_level_list.get(i)));
if(another_level_list != null){
loopingLowerLevel(another_level_list, mapP, (level+1), level_list, this_level_list);
} else {
level_list.add(this_level_list);
if(level > max_depth)
max_depth = level;
}
}
}
/*private static int loopingLowerLevel(List<String> low_level_list, Map<String, List<String>> mapP, String parent, int level, List<List<String>> level_list){
for(int i = 0; i < low_level_list.size(); i++){
List<String> another_level_list = mapP.get(low_level_list.get(i));
if(level_list.size() > level) {
List<String> list_p = level_list.get(level);
list_p.add(mapN.get(low_level_list.get(i)));
level_list.add(level, list_p);
} else {
List<String> list_p = new ArrayList<String>();
list_p.add(mapN.get(low_level_list.get(i)));
level_list.add(level, list_p);
}
if(another_level_list != null){
int rtnLevel = loopingLowerLevel(another_level_list, mapP, low_level_list.get(i), level++, level_list);
} else {
}
}
}*/
private static List<List<String>> getData(){
List<List<String>> data = new ArrayList<List<String>>();
List<String> dataRow = new ArrayList<String>();
dataRow.add("1");
dataRow.add("A");
dataRow.add("0");
dataRow.add("");
data.add(dataRow);
dataRow = new ArrayList<String>();
dataRow.add("2");
dataRow.add("B");
dataRow.add("1");
dataRow.add("");
data.add(dataRow);
dataRow = new ArrayList<String>();
dataRow.add("3");
dataRow.add("C");
dataRow.add("1");
dataRow.add("");
data.add(dataRow);
dataRow = new ArrayList<String>();
dataRow.add("4");
dataRow.add("D");
dataRow.add("2");
dataRow.add("");
data.add(dataRow);
dataRow = new ArrayList<String>();
dataRow.add("5");
dataRow.add("E");
dataRow.add("2");
dataRow.add("");
data.add(dataRow);
dataRow = new ArrayList<String>();
dataRow.add("6");
dataRow.add("F");
dataRow.add("3");
dataRow.add("");
data.add(dataRow);
dataRow = new ArrayList<String>();
dataRow.add("7");
dataRow.add("G");
dataRow.add("3");
dataRow.add("");
data.add(dataRow);
return data;
}
}