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

如何使用Java Stream从嵌套数组中筛选type为S/A的最小日期对象

正确Java Stream实现方案
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

// 核心逻辑,你的原有类和日期转换工具方法无需修改
public HashMap<String, PojoClass> getLowestDateOfTypeSandA(List<MainData> mainDataList) {
    return mainDataList.stream()
            // 取出每个MainData对应的SubData
            .map(MainData::getSubData)
            // 扁平化操作:把所有SubData内嵌的PojoList展开为统一的PojoClass流
            .flatMap(subData -> subData.getPojoList().stream())
            // 筛选仅type为S或A的记录
            .filter(pojo -> {
                String type = pojo.getType();
                return "S".equals(type) || "A".equals(type);
            })
            // 按type分组,每组保留日期最小的对象,最终转为HashMap返回
            .collect(Collectors.collectingAndThen(
                    Collectors.toMap(
                            PojoClass::getType,
                            Function.identity(),
                            // 合并规则:对比两个同type对象的日期,保留日期更小的对象
                            (pojo1, pojo2) -> {
                                Date date1 = convertXMLGregorianCalendarToDate(pojo1.getdate());
                                Date date2 = convertXMLGregorianCalendarToDate(pojo2.getdate());
                                return date1.after(date2) ? pojo2 : pojo1;
                            }
                    ),
                    HashMap::new
            ));
}

注意事项

  • 注意PojoClass的日期getter方法名为小写开头的getdate(),如果你的实际项目中遵循Java规范命名为getDate(),请对应修改代码中的方法调用。
  • 筛选逻辑采用"S".equals(type)的写法,可避免type为null时触发空指针异常。
  • 用Date.after()做日期对比,比直接比较时间戳可读性更高,也避免了XMLGregorianCalendar直接转long的潜在格式问题。

可选空值兼容优化

如果业务场景中可能出现SubData为null、pojoList为null的情况,可以调整中间逻辑避免空指针:

.map(MainData::getSubData)
.filter(Objects::nonNull) // 过滤为null的SubData
.flatMap(subData -> Optional.ofNullable(subData.getPojoList())
        .map(Collection::stream)
        .orElseGet(Stream::empty)) // pojoList为null时返回空流,不参与后续处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:09:02