如何使用java8

我需要将 Department 列表转换为 DepartmentDetails 列表。 Department 有按 id 分组的员工和经理的数据。如何创建包含隔离信息的 DepartmentDetails 列表?

 Class Department {
     private  int id ;
     private List<Employee> employee;
     private List<Manager> manager;
    }
    
    Class Employee {
      private int empId;
      private String empName;
    }
    
    Class Manager{
    private int manId;
    private String manName;
    }


   Class DepartmentDetails {
   private int id ;
   private String personType ;
   private int personId;
  }

这里,Department Details 的 id 与 Department id 保持一致,personType 的值为 Manager/Employee,personId 的值为 empId/manId。

一种方法是迭代 List<Department> 及其内部,迭代 List<Managers>List<Employees> ,使用 setter 创建所需的 DepartmentDetail 对象并添加到最终列表。有没有更优雅的方法来实现这一目标?

aiko_87 回答:如何使用java8

不确定为什么要编写此类层次结构。理想情况下,Manager 也是一个 Employee。如果这样做,Department 可以包含单个 List<Employee>

此外,DepartmentDetails 应该为 Integer 输入 personId。为了使用现有结构回答您的查询,我们可以将问题分解为多个较小的部分。

  1. 每个 Department 可以产生 List<DepartmentDetails>

    公开课部{

    private int id;
    private List<Employee> employee;
    private List<Manager> manager;
    
    public List<DepartmentDetails> toDepartmentDetails() {
        return Stream.concat(employee.stream().map(e -> DepartmentDetails.builder().id(this.id).personType(
                    "Employee")
                .personId(e.getEmpId()).build()),manager.stream().map(m -> DepartmentDetails.builder().id(this.id).personType("Manager")
                .personId(m.getManId()).build())).collect(Collectors.toList());
    }
    
    }
    
  2. 在迭代 flatMap 时使用 List<List<DepartmentDetails>>List<DepartmentDetails> 转换为 List<Department>

    List<DepartmentDetails> result =
            departments.stream().flatMap(department -> department.toDepartmentDetails().stream()).collect(Collectors.toList());
    
本文链接:https://www.f2er.com/16512.html

大家都在问