如何用Java Streams将嵌套对象列表转换为扁平列表?
Java Streams实现嵌套对象列表转扁平列表
可行性与适配性
完全可行,且非常适合用Java Streams实现——Streams的flatMap操作正是为处理这种嵌套集合的扁平化转换场景设计的,代码简洁易读,符合函数式编程风格。
完整实现代码
假设Company类包含getName()和getEmployees()方法,Employee类包含getFirstName()和getLastName()方法(根据代码逻辑推断),完整转换代码如下:
// create Apple Employees List<Employee> appleEmployees = List.of( new Employee("John", "Doe"), new Employee("Joe", "Bloggs") ); Company apple = new Company("Apple", appleEmployees); // create Microsoft Employees(注意原代码中"Microsofr"是拼写错误,建议修正为"Microsoft") List<Employee> microsoftEmployees = List.of( new Employee("John", "Public"), new Employee("Harry", "Fortune") ); Company microsoft = new Company("Microsoft", microsoftEmployees); // put apple and microsoft in a list List<Company> companies = List.of(apple, microsoft); // data carrier record CompanyData(String companyName,String employeeName, String employeeSurname) {} // 转换实现 List<CompanyData> companyData = companies.stream() .flatMap(company -> company.getEmployees().stream() .map(employee -> new CompanyData( company.getName(), employee.getFirstName(), employee.getLastName() )) ) .collect(Collectors.toList());
代码说明
flatMap:将每个Company对象转换为对应的CompanyData流,实现嵌套集合的扁平化——把每个公司的员工列表“展开”成单个数据流map:针对每个员工,结合所属公司的名称,生成对应的CompanyData对象collect(Collectors.toList()):将最终的数据流收集为List<CompanyData>,结果正好是需求中期望的4个对象的列表
内容的提问来源于stack exchange,提问作者Hakan Kiyar
相关产品推荐
相关产品推荐

