映射以避免重复记录

Map to avoid Duplicate records

I have a Holiday Custom object,it contains Unique Dates based on country based How to retrieve the value in Map

我试过:

 List<Holiday__c> holidays = new List<Holiday__c>([Select id, Date__c,Country__c from Holiday__c]);

    Map<date, Holiday__c> mapOfHolidays = new Map<date, Holiday__c>(); 
    for (Holiday__c holiday: holidays)  mapOfHolidays.put(holiday.Date__c , holiday); 

假设日期,例如 3/8/17 是法国和意大利的日期,如果我将键值设为 Date__c,地图不包含重复的键,但对于每个国家/地区,都有唯一的日期

所以我必须在地图中使用键和值,我想使用地图检索日期,请任何人帮助我回答

trigger ignoreweekends on order (before insert,before update) {

    Set<id> accountIds = new Set<Id>();
    for (order ord : Trigger.new) {
        accountids.add(ord.AccountId);
    }

    map<id, account> mapOfAccounts = new map<id, account>([select id,JDE_Date_Delivery_Offset__c from account where id IN: accountIds]);

    List<Holiday__c> holidays = new List<Holiday__c>([Select id, Date__c from Holiday__c]);

    Map<date, Holiday__c> mapOfHolidays = new Map<date, Holiday__c>(); 
    for (Holiday__c holiday: holidays)  mapOfHolidays.put(holiday.Date__c , holiday); 

    for (order so : Trigger.new) {
        Account acc = mapOfAccounts.get(so.AccountId); 
        for(integer i=0;i<=acc.JDE_Date_Delivery_Offset__c;i++) {
            Datetime dt = DateTime.newInstance(Date.today() +acc.JDE_Date_Delivery_Offset__c.longvalue(), Time.newInstance(0, 0, 0, 0));
            String dayOfWeek=dt.format('EEEE');

            if(dayOfWeek == 'saturday' || dayOfWeek == 'sunday'|| mapOfHolidays.containskey(mapOfHolidays.Date__c))  

            acc.JDE_Date_Delivery_Offset__c = acc.JDE_Date_Delivery_Offset__c+ 1;

            so.JDE_Synchronization_Date__c = Date.today().addDays(acc.JDE_Date_Delivery_Offset__c.intValue());
        }
    }
}

如果我没理解错的话,对于一个唯一的日期,您有多个国家/地区。 为此,您可以创建一个 Date 作为键和 List 作为值的映射,而不是创建 Date 和 Holiday_c 的映射。 例如:

Map<Date, List<Holiday__c>> mapofHolidays = new HashMap<Date, List<Holiday__c>>();

之后您可以检索所有国家/地区的唯一日期并进行所需的处理。