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

如何使用Java Stream API从对象列表的属性列表生成新列表

Java 8 Stream 实现对象列表转换方案

嘿,刚上手Java 8 Stream对吧?这个从List<objMain>转成List<objUserMain>的需求其实很典型,用flatMap就能完美解决,我给你一步步说明:

核心思路

每个objMain对象里包含一个objUser列表,我们需要把这个列表扁平化——也就是把每个objUser都单独拿出来,再给它配上所属objMain的rid和rname,最终组合成objUserMain对象。

前置准备:确保实体类有访问方法

首先要注意,你的实体类需要有对应的getter方法(或者用Lombok的@Data注解自动生成),这样Stream才能读取属性值。修正后的实体类大概是这样:

class objMain {
    private Long rid;
    private List<objUser> list;
    private String rname;

    // 生成getter方法
    public Long getRid() { return rid; }
    public List<objUser> getList() { return list; }
    public String getRname() { return rname; }
}

class objUser {
    private String userid;

    public String getUserid() { return userid; }
}

class objUserMain {
    private Long rid;
    private String rname;
    private String userid;

    // 构造方法
    public objUserMain(Long rid, String rname, String userid) {
        this.rid = rid;
        this.rname = rname;
        this.userid = userid;
    }

    // 可选:toString方法方便调试
    @Override
    public String toString() {
        return "objUserMain{" +
                "rid=" + rid +
                ", rname='" + rname + '\'' +
                ", userid='" + userid + '\'' +
                '}';
    }
}

Stream 实现代码

接下来就是核心的转换逻辑,用flatMap处理扁平化,再用map转换对象:

import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

// 假设你的原始列表是mainList
List<objMain> mainList = // 你的原始数据列表
List<objUserMain> resultList = mainList.stream()
        // 处理可能为null的list,避免空指针异常
        .flatMap(main -> Optional.ofNullable(main.getList())
                .orElse(Collections.emptyList())
                .stream()
                // 把每个objUser和所属objMain的属性组合成目标对象
                .map(user -> new objUserMain(main.getRid(), main.getRname(), user.getUserid())))
        .collect(Collectors.toList());

代码细节解释

  • flatMap:它的作用是把每个objMain对应的objUser小流,合并成一个统一的大流,实现列表扁平化的效果
  • Optional.ofNullable(main.getList()).orElse(Collections.emptyList()):这一步是为了防止objMain里的list为null导致的NullPointerException,如果list为null就用空列表代替
  • map(user -> new objUserMain(...)):把每个objUser和所属objMain的rid、rname组合成目标对象objUserMain
  • collect(Collectors.toList()):把最终处理好的流收集成List<objUserMain>

这样就能得到你想要的结果啦,要是还有细节问题随时问~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:52:11