public static DelayedGroup <T> Create(string groupKey, DateTime createAt) { var theGroup = new DelayedGroup <T>(); theGroup.GroupKey = groupKey; theGroup.LastItemDate = createAt; return(theGroup); }
public void AppendToGroups(IList <T> items, Func <T, string> getGroupKey, Func <T, DateTime> getAppendAt) { if (getGroupKey == null) { throw new ArgumentNullException(nameof(getGroupKey)); } if (getAppendAt == null) { throw new ArgumentNullException(nameof(getAppendAt)); } if (items == null || items.Count == 0) { return; } lock (Lock) { var groups = items.GroupBy(getGroupKey); foreach (var itemGroup in groups) { var groupKey = itemGroup.Key; var groupItems = itemGroup.ToList(); if (groupItems.Count > 0) { var lastItemDate = groupItems.Max(getAppendAt); DelayedGroups.TryGetValue(groupKey, out var theGroup); if (theGroup == null) { theGroup = DelayedGroup <T> .Create(groupKey, lastItemDate); DelayedGroups.Add(groupKey, theGroup); } theGroup.LastItemDate = lastItemDate; theGroup.AppendItems(groupItems); } } } }