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

Java如何通过循环按交易日期生成去重的MasterDetail主从列表

逻辑修正方案

原有代码核心问题

  • 内层遍历每匹配到一个不同日期就新增一次MasterDetail对象,同一条输入会被重复添加N次(N等于当前列表长度)
  • 匹配到同日期时直接覆盖整个MasterDetail对象,会丢失之前已存入的同日期明细
  • 每次新建MasterDetail时仅传入当前单条明细,没有复用已有同日期对象的明细集合

实现方案

方案1:用Map临时存储(性能更高,推荐)

借助Map的O(1)查找特性,用交易日期作为键快速匹配同日期主对象:

// 临时存储映射:交易日期 -> 对应MasterDetail对象
Map<String, MasterDetail> dateMasterMap = new HashMap<>();

for (Input input : inputList) {
    String transDate = input.getTransactionDate();
    MasterDetail currentMd = dateMasterMap.get(transDate);
    // 同日期对象不存在则新建
    if (currentMd == null) {
        Master master = new Master(transDate);
        List<Detail> detailList = new ArrayList<>();
        currentMd = new MasterDetail(master, detailList);
        dateMasterMap.put(transDate, currentMd);
    }
    // 明细加入已有集合
    currentMd.getDetails().add(new Detail(input.getAmount()));
}

// 转换为最终结果列表
List<MasterDetail> masterDetails = new ArrayList<>(dateMasterMap.values());

// 若需要按交易日期排序,可补充以下逻辑
masterDetails.sort(Comparator.comparing(md -> md.getMaster().getTransDate()));

方案2:双层循环实现(兼容原有写法)

如果不想引入Map,可修正原有双层循环逻辑:

List<MasterDetail> masterDetails = new ArrayList<>();
for (Input input : inputList) {
    String transDate = input.getTransactionDate();
    boolean dateExisted = false;
    // 先遍历查找是否有同日期对象
    for (MasterDetail md : masterDetails) {
        if (md.getMaster().getTransDate().equals(transDate)) {
            // 存在则新增明细
            md.getDetails().add(new Detail(input.getAmount()));
            dateExisted = true;
            break;
        }
    }
    // 不存在则新建主从对象
    if (!dateExisted) {
        Master master = new Master(transDate);
        List<Detail> detailList = new ArrayList<>();
        detailList.add(new Detail(input.getAmount()));
        masterDetails.add(new MasterDetail(master, detailList));
    }
}

注意事项

  • 确保MasterDetail类提供getDetails()公共方法,或者单独封装addDetail(Detail detail)方法用于添加明细
  • 交易日期若为字符串类型,需保证格式统一避免匹配失败;若为Date/LocalDate类型,需保证equals方法逻辑符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:36:02