我在下面的现有代码中将一个对象转换为另一个对象-

for(Department dept : company.getDepartments()) {
  if(!isEmpty(dept.getEmployees())) {
        for(Employee emp : dept.getEmployees()) {

        try {
            employyeV2List.add(new EmployeeV2(emp.getId(),  emp.getFirstName(),..., dept.getId()));
        } catch (ParseException e) {
            //error logger
        }

    }
  }

}


我想在这里添加java 8流api而不是两个for循环,但是如果您在try block中看到dept.getId(),则我无法在流API中访问它。我在下面尝试-

List<Employee> employees = company.getDepartment().stream().map(x -> x.getEmployees())
            .flatMap(x -> x.stream()).collect(Collectors.toList());


List<EmployeeV2> employeeV2List = employees.stream().map(x -> getEmployeeV2(x)).collect(Collectors.toList());


getEmployeeV2()中,我正在创建EmployeeV2对象。但是我不确定如何将部门传递到这里,以便可以访问部门ID。

最佳答案

你可以这样做

List<EmployeeV2> result = company.getDepartment().stream()
    .flatMap(d -> d.getEmployees().stream()
        .map(e -> new EmployeeV2(e.getId(), e.getFirstName(), d.getId())))
    .collect(Collectors.toList());

07-25 21:23