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

如何使用Stream从对象中提取多个属性值添加到同一个列表

实现方法

可以实现,使用Stream的flatMap操作即可完成需求,示例代码如下:

import java.util.stream.Stream;
import java.util.stream.Collectors;

// 原有代码
List<MyObject> myObject = new ArrayList<>();
// 已填充myObject数据

// 单条语句同时收集两个属性值
List<Long> ids = myObject.stream()
        .flatMap(item -> Stream.of(item.getJobId(), item.getTestId()))
        .collect(Collectors.toList());

原理解释

  • 你之前使用的map操作是1对1映射:每个MyObject实例只会输出1个jobId值,所以最终列表仅包含所有对象的jobId
  • flatMap是1对多映射:每个MyObject实例会先生成包含jobId和testId两个值的小流,flatMap会自动把所有小流拼接成一个总的Long类型流,最终收集后就会把两个属性的所有值都存入同一个列表。
  • 最终列表的元素顺序为:第一个对象的jobId → 第一个对象的testId → 第二个对象的jobId → 第二个对象的testId,以此类推。

可选优化

如果使用Java 16及以上版本,可以省略Collectors简化写法:

List<Long> ids = myObject.stream()
        .flatMap(item -> Stream.of(item.getJobId(), item.getTestId()))
        .toList();

如果需要过滤属性为空的情况,可追加filter操作:

import java.util.Objects;

List<Long> ids = myObject.stream()
        .flatMap(item -> Stream.of(item.getJobId(), item.getTestId()))
        .filter(Objects::nonNull)
        .collect(Collectors.toList());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:36:05