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

Java8如何从多层嵌套列表结构中提取指定类成员属性列表

Java 8 如何提取多层嵌套列表中的类成员属性

现有嵌套类结构如下(示例为3层,实际可支持4-5层嵌套):

public class CustomerSales {
    public List<Product> productList;
    // 其余属性省略
}

public class Product {
    public List<ProductSubItem> productSubItemList;
    // 其余属性省略
}

public class ProductSubItem {
    public String itemName;
    // 其余属性省略
}

错误写法问题说明

你之前的写法仅将Product映射为对应的ProductSubItem列表,最终得到的是List<List<ProductSubItem>>类型的结果,没有做扁平化处理,也没有进一步提取itemName属性。

正确实现方案

使用Stream的flatMap方法做嵌套列表的扁平化,每一层嵌套列表对应一次flatMap调用,最后一层用map提取目标属性:

3层嵌套实现代码

import java.util.stream.Collectors;

// 业务逻辑处
List<String> itemNameList = customerSales.productList.stream()
    // 扁平化第一层嵌套:将每个Product对应的ProductSubItem列表展开为独立的流元素
    .flatMap(product -> product.productSubItemList.stream())
    // 提取目标属性itemName
    .map(productSubItem -> productSubItem.itemName)
    .collect(Collectors.toList());

多层级扩展说明

如果是4-5层嵌套,只需要每多一层嵌套列表,就多加一次flatMap做扁平化即可,示例4层嵌套的写法:
假设ProductSubItem中还有List<ItemParam> paramList属性,ItemParam类中存在目标属性paramCode,实现代码如下:

List<String> paramCodeList = customerSales.productList.stream()
    .flatMap(product -> product.productSubItemList.stream())
    .flatMap(subItem -> subItem.paramList.stream())
    .map(itemParam -> itemParam.paramCode)
    .collect(Collectors.toList());

注意事项

如果嵌套列表可能存在null值,需要在flatMap中增加判空逻辑,避免抛出空指针异常,示例:

.flatMap(product -> product.productSubItemList == null ? Stream.empty() : product.productSubItemList.stream())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:54:00