Java递归填充一个对象

huangapple go评论85阅读模式
英文:

Java recursively populate a Object

问题

这里有一个 JSON,是一个对象列表,其中每个对象都有一个自己类型的属性(属性 manager 的类型是 employee),如下所示:

  1. {
  2. "employee": [
  3. {
  4. "id": "",
  5. "name": "",
  6. "address": {
  7. "city": "",
  8. "state": ""
  9. },
  10. "manager": {
  11. "id": "",
  12. "name": "",
  13. "address": {
  14. "city": "",
  15. "state": ""
  16. },
  17. "manager": null
  18. }
  19. }
  20. ]
  21. }

我有以下属性的 DTO 类,其中 Employee 具有一个类型为 Employee 的成员变量。

  1. class Employee {
  2. private String id;
  3. private Address address;
  4. private Employee manager;
  5. //getter & setter
  6. }
  7. class Address {
  8. private String city;
  9. //getter & setter
  10. }

我的要求是递归地填充 Employee 对象(嵌套可以是 n 级 Employee -> Manager -> Manager -> Manager ...),并形成一个新的 Employee 对象列表。

这将会得到以下结果:

  1. {
  2. "employee": [
  3. {
  4. "id": "",
  5. "address": {
  6. "city": ""
  7. },
  8. "manager": {
  9. "id": "",
  10. "address": {
  11. "city": ""
  12. },
  13. "manager": null
  14. }
  15. }
  16. ]
  17. }

任何建议都将是极大的帮助。

英文:

I have a json which is a list of objects with a property of its own type (property manager is of type employee) as below.

  1. {
  2. "employee": [
  3. {
  4. "id": "",
  5. "name": "",
  6. "address": {
  7. "city": "",
  8. "state": ""
  9. },
  10. "manager": {
  11. "id": "",
  12. "name": "",
  13. "address": {
  14. "city": "",
  15. "state": ""
  16. },
  17. "manager": null
  18. }
  19. }
  20. ]
  21. }

I have DTO classes with below properties where Employee has a member variable of type Employee.

  1. class Employee{
  2. private String id;
  3. priavte Address address;
  4. private Employee manager
  5. //getter & setter
  6. }
  7. class Address{
  8. private String city;
  9. //getter & setter
  10. }

My requirement is to populate Employee Object recursively (nesting can be of n level Employee -> Manager -> Manager -> Manager ...) and form a new List of Employee Object.

Which will give us the result as below

  1. {
  2. "employee": [
  3. {
  4. "id": ""
  5. "address": {
  6. "city": ""
  7. },
  8. "manager": {
  9. "id": ""
  10. "address": {
  11. "city": ""
  12. },
  13. "manager": null
  14. }
  15. }
  16. ]
  17. }

Any suggestion would be a great help.

答案1

得分: 0

获得了解决上述问题的方法:

  1. private List<Employee> mapEmployeeModel(List<Employee> employeeList, List<Employee> newEmployeeList) {
  2. for (Employee emp : employeeList) {
  3. Employee newEmp = mapEmployee(emp);
  4. newEmployeeList.add(newEmp);
  5. }
  6. return newEmployeeList;
  7. }
  8. private Employee mapEmployee(Employee emp) {
  9. Employee newEmp = new Employee();
  10. newEmp.setId(emp.getId());
  11. newEmp.setName(emp.getName());
  12. newEmp.setAddress(mapAddress(emp));
  13. if(emp.getManager() == null) {
  14. return newEmp;
  15. } else {
  16. newEmp.setManager(mapEmployee(emp.getManager())); // 递归地设置经理
  17. }
  18. return newEmp;
  19. }
  20. private Address mapAddress(Employee emp) {
  21. Address address = new Address();
  22. address.setCity(emp.getAddress().getCity());
  23. return address;
  24. }
英文:

Got the way to achieve the solution of above problem

  1. private List&lt;Employee&gt; mapEmployeeModel(List&lt;Employee&gt; employeeList, List&lt;Employee&gt; newEmployeeList) {
  2. for (Employee emp : employeeList) {
  3. Employee newEmp = mapEmployee(emp);
  4. newEmployeeList.add(newEmp);
  5. }
  6. return newEmployeeList;
  7. }
  8. private Employee mapEmployee(Employee emp) {
  9. Employee newEmp = new Employee ();
  10. newEmp.setId(emp.getId());
  11. newEmp.setName(emp.getName());
  12. newEmp.setAddress(mapAddress(emp));
  13. if(emp.getManager() == null) {
  14. return newEmp;
  15. } else {
  16. newEmp.setManager(mapEmployee(emp.getManager()));// Recursively setting up the managers
  17. }
  18. return newEmp;
  19. }
  20. private Address mapAddress(Employee emp) {
  21. Address address = new Address();
  22. address.setCity(emp.getAddress().getCity);
  23. return address;
  24. }

huangapple
  • 本文由 发表于 2020年8月16日 12:01:51
  • 转载请务必保留本文链接:https://go.coder-hub.com/63433018.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定