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

SpringBoot中如何扁平化POJO并将子字段值赋给父对象?

实现Company地址扁平化方法

给定以下POJO结构,需要实现flattenAddresses方法:输入一个Company对象,返回一个List<Company>。每个新Company对象保留原对象的name字段,city和country字段取自原对象previousLocations列表中的每个Address实例,最终返回列表的长度与previousLocations的元素数量一致。

修正后的POJO代码

import java.util.ArrayList;
import java.util.List;

public class Company {
    String name;
    String city;
    String country;
    List<Address> previousLocations = new ArrayList<>(); // 初始化集合避免空指针异常
}

public class Address {
    String city;
    String country;

    Address(String city, String country) {
        this.city = city;
        this.country = country;
    }
}

public class Main {
    public static void main(String[] args) {
        Address a1 = new Address("Toronto", "Canada");
        Address a2 = new Address("Oakland", "USA");

        Company c = new Company();
        c.name = "AB TECH";
        c.previousLocations.add(a1);
        c.previousLocations.add(a2);

        List<Company> flattened = flattenAddresses(c);
    }
}

flattenAddresses方法实现

方式一:传统循环实现

public static List<Company> flattenAddresses(Company c) {
    List<Company> resultList = new ArrayList<>();
    for (Address addr : c.previousLocations) {
        Company newCompany = new Company();
        newCompany.name = c.name; // 复用原公司名称
        newCompany.city = addr.city;
        newCompany.country = addr.country;
        resultList.add(newCompany);
    }
    return resultList;
}

方式二:Java Stream实现

利用Stream的map操作将每个Address转换为新的Company对象,再收集为列表:

import java.util.stream.Collectors;

public static List<Company> flattenAddresses(Company c) {
    return c.previousLocations.stream()
            .map(addr -> {
                Company newComp = new Company();
                newComp.name = c.name;
                newComp.city = addr.city;
                newComp.country = addr.country;
                return newComp;
            })
            .collect(Collectors.toList());
}

关于flatMap的关联说明

你提到的flatMap核心作用是集合的扁平化处理,适合处理「集合的集合」场景:如果输入是List<Company>(多个Company对象),需要把每个Company的previousLocations都展开为独立的Company对象并合并成一个列表,此时就可以用flatMap实现。示例代码如下:

public static List<Company> flattenMultipleCompanies(List<Company> companies) {
    return companies.stream()
            .flatMap(company -> company.previousLocations.stream()
                    .map(addr -> {
                        Company newComp = new Company();
                        newComp.name = company.name;
                        newComp.city = addr.city;
                        newComp.country = addr.country;
                        return newComp;
                    }))
            .collect(Collectors.toList());
}

这里flatMap会把每个Company对应的Address流「扁平化」为单个流的元素,最终合并成完整的流后收集为列表。

内容的提问来源于stack exchange,提问作者puneeth choppanati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:04:54