public GroupedCorrelationEvents(Map<String, EventInformation> correlatedEvents, String rootEventId) { this.allEvents = correlatedEvents; Map<String, ComponentGroupedEvents> unsortedComponentGroupedEvents = new HashMap<>(); correlatedEvents.values().forEach(event -> { String sourceComponentName = event.getComponentName(); Set<String> targetComponents = event.getTargetComponents(); ComponentGroupedEvents groupedEvents = unsortedComponentGroupedEvents.get(sourceComponentName); if (groupedEvents == null) { groupedEvents = new ComponentGroupedEvents(sourceComponentName); unsortedComponentGroupedEvents.put(sourceComponentName, groupedEvents); } groupedEvents.addOutputEventId(event.getEventId()); for (String component : targetComponents) { groupedEvents = unsortedComponentGroupedEvents.get(component); if (groupedEvents == null) { groupedEvents = new ComponentGroupedEvents(component); unsortedComponentGroupedEvents.put(component, groupedEvents); } groupedEvents.addInputEventId(event.getEventId()); } }); componentGroupedEvents = unsortedComponentGroupedEvents.entrySet() .stream() .collect(toMap(Map.Entry::getKey, entry -> new SortedComponentGroupedEvents(allEvents, entry.getValue(), rootEventId))); }