I have an input like –
emp_id,emp_name,manageremp_id
1,A,
2,B,1
4,C,1
3,F,4
5,E,2
And I want output is like –
1,A,
2,B,/A/B
4,C,/A/C
3,F,/A/C/F
5,E,A/B/E
I know this can be achieved through Oracle hierarchical queries. However, data is coming from flat file and we don’t want to do staging. Any idea about how could we do it using java. Using two HashMap I was able to do some till –
1,A
2,B,A
4,C,A
3,F,C
However, I was not able to print full path. Could anyone please help me to do it using java.
Following code can be used -
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Emp {
private static Map<Integer,Emp> empMap= new HashMap<>();
private Integer empId;
private String empName;
private Integer mgrId;
public Integer getMgrId() {
return mgrId;
}
public static Emp createEmp(Integer empId, String empName, Integer mgrId){
Emp e= new Emp(empId, empName, mgrId);
empMap.put(empId,e);
return e;
}
private Emp(Integer empId, String empName, Integer mgrId) {
this.empId = empId;
this.empName = empName;
this.mgrId = mgrId;
}
private String getManagerName(Integer empId){
if (Emp.empMap.get(empId).getMgrId() == null) {
return Emp.empMap.get(empId).empName;
}else {
return getManagerName(Emp.empMap.get(empId).getMgrId()) + "/" +
Emp.empMap.get(empId).empName;
}
}
@Override
public String toString() {
String displayManager = getManagerName(empId).equals(empName)?"":getManagerName(empId);
return empId + "," +
empName + "," +
displayManager;
}
public static void main(String[] args) {
List<Emp> emps = new ArrayList<>();
emps.add(Emp.createEmp(1,"A",null));
emps.add(Emp.createEmp(2,"B",1));
emps.add(Emp.createEmp(4,"C",1));
emps.add(Emp.createEmp(3,"F",4));
emps.add(Emp.createEmp(5,"E",2));
for(Emp emp:emps){
System.out.println(emp);
}
}
}