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

如何用Java Stream获取三层嵌套结构中指定ID的MonthKeyResult对象

正确的Java Stream一步式实现方案

假设你的对象结构对应如下JSON结构(根据描述还原):

{
  "pageItems": [
    {
      "keyResults": [
        {
          "monthKeyResults": [
            {
              "id": "target-id",
              "data": "sample content"
            }
          ]
        }
      ]
    }
  ]
}

一步式Stream代码实现

String targetId = "your-target-id";

// 从三层嵌套结构中获取指定ID的MonthKeyResult
Optional<MonthKeyResult> targetMkr = pageItems.stream()
    // 扁平化第一层:展开PageItems到KeyResults集合
    .flatMap(pageItem -> pageItem.getKeyResults().stream())
    // 扁平化第二层:展开KeyResults到MonthKeyResults集合
    .flatMap(keyResult -> keyResult.getMonthKeyResults().stream())
    // 过滤匹配目标ID的对象
    .filter(mkr -> targetId.equals(mkr.getId()))
    // 获取第一个匹配项(无匹配则返回空Optional)
    .findFirst();

错误写法的常见问题分析

你之前的Stream代码失效,大概率是误用了map而非flatMap:

  • 使用map处理嵌套集合时,会生成Stream<Stream<T>>的嵌套流结构,后续的过滤、查找操作无法直接作用到内层的MonthKeyResult对象上
  • flatMap会将嵌套流“扁平化”,直接把内层流的元素合并到外层流中,最终得到单一维度的Stream<MonthKeyResult>,才能正常执行过滤和查找逻辑

关于合并多步操作

上面的代码已经是完整的一步式流水线:从pageItems的流开始,通过两次flatMap逐层展开嵌套结构,接着过滤、查找,所有逻辑串联成一个连续的Stream操作,无需拆分多步执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:16:16