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

如何通过Streams获取含指定id且日期最新的InnerObject的OutterObject的id?

解决方案:用Java Streams获取符合条件的OutterObject ID

需求回顾

要从嵌套对象集合中找到目标OutterObject的ID,需满足两个条件:

  • 关联的InnerObjectID等于指定值;
  • 该InnerObject的date是所有符合ID条件的InnerObject里最新的。
    示例场景:当指定InnerObject ID为"ab"时,返回对应的OutterObject ID"def"。

实体类假设

先定义对应JSON结构的实体类(需包含getter方法):

class OutterObject {
    private String id;
    private List<InnerObject> innerObjects;

    public String getId() { return id; }
    public List<InnerObject> getInnerObjects() { return innerObjects; }
}

class InnerObject {
    private String id;
    private LocalDate date;

    public String getId() { return id; }
    public LocalDate getDate() { return date; }
}

Streams实现代码

public String getTargetOutterId(String targetInnerId, List<OutterObject> outterList) {
    return outterList.stream()
            // 平铺所有符合Inner ID条件的条目,绑定外层ID和内层日期
            .flatMap(outter -> outter.getInnerObjects().stream()
                    .filter(inner -> targetInnerId.equals(inner.getId()))
                    .map(inner -> new AbstractMap.SimpleEntry<>(outter.getId(), inner.getDate())))
            // 按日期倒序排序,取最顶部的最新条目
            .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
            .findFirst()
            // 提取外层ID,无匹配时返回null(可替换为默认值)
            .map(Map.Entry::getKey)
            .orElse(null);
}

代码说明

  1. 扁平化映射:通过flatMap将每个OutterObject下符合目标ID的InnerObject转换为包含外层ID和内层日期的键值对,把嵌套结构转为扁平的流元素,便于后续排序筛选。
  2. 排序与取最新:用sorted按日期降序排列流元素,findFirst直接拿到日期最新的那条记录。
  3. 结果处理:通过map提取对应的外层ID,若没有符合条件的元素,orElse返回默认值(这里用null,可根据需求调整)。

测试示例数据时,所有ID为"ab"的InnerObject中日期最新的那条,对应的OutterObjectID就是"def",完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:50:25