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

Java中如何从嵌套列表(List<ObjectA>含List<ObjectB>)返回匹配对象/属性?

使用Java Streams从嵌套列表中获取匹配对象/属性

当然可以用Streams实现需求,利用flatMap扁平化嵌套列表,结合filter做条件匹配,最后用findFirst()获取第一个匹配的元素(和anyMatch一样支持短路终止,保证效率)。以下是具体实现:

1. 获取匹配的ObjectC对象

import java.util.Objects;
import java.util.Optional;

// 获取第一个符合条件的ObjectC,返回Optional避免空指针
Optional<ObjectC> matchingObjectC = MasterObject.getListObjectA().stream()
    .filter(Objects::nonNull) // 过滤null的ObjectA实例
    .flatMap(objectA -> objectA.getListObjectB().stream()) // 将所有ObjectB展开为单一流
    .map(ObjectB::getObjectC) // 从ObjectB提取ObjectC
    .filter(Objects::nonNull) // 过滤null的ObjectC实例
    .filter(objectC -> "rf".equals(objectC.getType()) && objectC.getLength() == 3) // 匹配条件
    .findFirst(); // 找到第一个匹配项后立即终止流

2. 直接获取ObjectC的propertyID属性

如果只需要propertyID,可以在流中直接映射:

Optional<String> matchingPropertyId = MasterObject.getListObjectA().stream()
    .filter(Objects::nonNull)
    .flatMap(objectA -> objectA.getListObjectB().stream())
    .map(ObjectB::getObjectC)
    .filter(Objects::nonNull)
    .filter(objectC -> "rf".equals(objectC.getType()) && objectC.getLength() == 3)
    .map(ObjectC::getPropertyID) // 提取propertyID
    .findFirst();

3. 获取匹配的ObjectB对象

如果需要先拿到ObjectB的引用,再从中提取ObjectC属性:

Optional<ObjectB> matchingObjectB = MasterObject.getListObjectA().stream()
    .filter(Objects::nonNull)
    .flatMap(objectA -> objectA.getListObjectB().stream())
    // 直接在ObjectB层面做条件判断,同时避免ObjectC为null的情况
    .filter(objectB -> objectB.getObjectC() != null 
        && "rf".equals(objectB.getObjectC().getType()) 
        && objectB.getObjectC().getLength() == 3)
    .findFirst();

// 从ObjectB中提取ObjectC的propertyID
Optional<String> propertyIdFromB = matchingObjectB.map(b -> b.getObjectC().getPropertyID());

关键说明

  • flatMap:将嵌套的List<ObjectB>展开为连续的流,避免嵌套循环。
  • findFirst():具有短路特性,找到第一个匹配元素后立即停止遍历,和你之前用的anyMatch效率一致。
  • Optional:用来处理可能不存在匹配元素的情况,避免空指针异常,你可以通过ifPresent()、orElse()等方法处理结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:16:23