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

Apex Salesforce中读取sObjects类型Map的值求助

读取Map中Value集合值的几种方法

你的代码已经正确构建了以CreatedById为键、对应用户订单列表为值的Map,以下是几种读取Value中记录的实用方式:

1. 遍历Map所有键,逐个获取对应订单列表

通过keySet()拿到所有用户Id,再用get()方法获取该用户的订单列表,之后遍历每条记录读取字段:

// 遍历Map的所有用户Id键
for (Id userId : usersOrdersMap.keySet()) {
    // 获取当前用户对应的订单列表
    List<OrderDestinationItem__c> userOrders = usersOrdersMap.get(userId);
    System.debug('用户Id:' + userId + ' 的订单数量:' + userOrders.size());
    
    // 遍历该用户的每一条订单记录
    for (OrderDestinationItem__c orderItem : userOrders) {
        // 读取订单字段示例
        System.debug('订单Id:' + orderItem.Id);
        System.debug('订单状态:' + orderItem.OrdStatus__c);
        System.debug('订单金额:' + orderItem.Total_Line_Amount__c);
        // 其他字段可按同样方式读取
    }
}

2. 直接遍历Map的键值对条目

使用entrySet()直接获取Map的键值对,无需单独通过键取值,写法更简洁:

// 遍历Map的每个键值对条目
for (Map.Entry<Id, List<OrderDestinationItem__c>> entry : usersOrdersMap.entrySet()) {
    Id userId = entry.getKey(); // 获取当前条目对应的用户Id
    List<OrderDestinationItem__c> userOrders = entry.getValue(); // 获取当前条目对应的订单列表
    
    System.debug('用户Id:' + userId + ' 的订单详情:');
    for (OrderDestinationItem__c orderItem : userOrders) {
        System.debug('创建时间:' + orderItem.CreatedDate + ',订单金额:' + orderItem.Total_Line_Amount__c);
    }
}

3. 根据特定用户Id直接读取订单

如果已知目标用户Id,可直接通过键获取对应订单列表,再遍历读取:

// 替换为实际目标用户Id
Id targetUserId = '005XXXXXXXXXXXX'; 
if (usersOrdersMap.containsKey(targetUserId)) {
    List<OrderDestinationItem__c> targetOrders = usersOrdersMap.get(targetUserId);
    for (OrderDestinationItem__c orderItem : targetOrders) {
        System.debug('目标用户订单Id:' + orderItem.Id + ',状态:' + orderItem.OrdStatus__c);
    }
} else {
    System.debug('该用户无符合条件的订单');
}

额外优化:简化Map构建写法

你当前的Map构建逻辑没问题,也可以用SOQL分组配合构造器简化(效率相近,写法更短):

Map<Id, List<OrderDestinationItem__c>> usersOrdersMap = new Map<Id, List<OrderDestinationItem__c>>();
// 先按用户分组,再批量查询每个用户的订单
for (AggregateResult ar : [SELECT CreatedById FROM OrderDestinationItem__c 
                           WHERE CreatedDate > 2024-04-10T07:27:52.000+0000 AND Total_Line_Amount__c > 20
                           GROUP BY CreatedById]) {
    Id userId = (Id)ar.get('CreatedById');
    usersOrdersMap.put(userId, [SELECT Id, CreatedDate, OrdStatus__c, Total_Line_Amount__c 
                                FROM OrderDestinationItem__c 
                                WHERE CreatedById = :userId 
                                AND CreatedDate > 2024-04-10T07:27:52.000+0000 
                                AND Total_Line_Amount__c > 20]);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:45:08