You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:24:57