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

迭代ArrayList时如何根据另一对象列表校验结果更新实体值

需求可以直接实现,你需要的isComplete字段赋值逻辑可以通过Java 8 Stream的allMatch方法完成,刚好匹配「所有字段都满足条件才返回true」的要求。

修改后的完整转换方法

public static List<DestDO> mapSourceToDest(List<SourceDO> listOfSourceObj){
    List<DestDO> desiredResult = new ArrayList<>();
    for(SourceDO sourceDo : listOfSourceObj){
        // 校验所有字段非空非null
        boolean completeFlag = Stream.of(
                sourceDo.getId(),
                sourceDo.getName(),
                sourceDo.getPhase(),
                sourceDo.getAttr()
            )
            .allMatch(field -> field != null && !field.isEmpty());
        desiredResult.add(DestDO.builder()
            .id(Optional.ofNullable(sourceDo.getId()).orElse(""))
            .name(Optional.ofNullable(sourceDo.getName()).orElse(""))
            .phase(Optional.ofNullable(sourceDo.getPhase()).orElse(""))
            .attr(Optional.ofNullable(sourceDo.getAttr()).orElse(""))
            .isComplete(String.valueOf(completeFlag))
            .build()); // 注意原代码漏了build()调用,需补上
    }
    return desiredResult;
}

逻辑说明

  • 把SourceDO需要校验的四个字段全部放入Stream流中
  • 调用allMatch方法做统一校验:只有所有字段都满足「不为null且不为空字符串」的条件,才会返回true,任意字段不满足直接返回false
  • 因为你当前DestDO的isComplete字段是String类型,所以用String.valueOf把布尔值转成字符串存入即可,如果你后续把isComplete改成boolean类型,直接赋值completeFlag即可。

如果想要代码更简洁,也可以把校验逻辑直接写到builder的isComplete方法里,不用单独声明变量:

.isComplete(String.valueOf(Stream.of(sourceDo.getId(), sourceDo.getName(), sourceDo.getPhase(), sourceDo.getAttr())
    .allMatch(field -> field != null && !field.isEmpty())))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:18:01