首页 > 解决方案 > 在java 8中访问从第一个流到下一个流api的对象引用

问题描述

我有以下现有代码将一个对象转换为另一个对象-

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 blockdept.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。

标签: javajava-8java-stream

解决方案


你可以这样做,

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

推荐阅读