2323import java .util .ArrayList ;
2424import java .util .Collection ;
2525import java .util .HashMap ;
26+ import java .util .Iterator ;
27+ import java .util .LinkedHashSet ;
2628import java .util .List ;
2729import java .util .Map ;
2830import java .util .Map .Entry ;
@@ -90,7 +92,7 @@ private Collection<Map<EventRegistrationBuilder, CloudEvent>> eventAdded(
9092 CorrelationOperations operations , String reg , CloudEvent event ) {
9193 logger .debug (
9294 "Received event {} for definition {} and registration {}" , event , definition .id (), reg );
93- Map <String , List <CloudEvent >> events = initMap ();
95+ Map <String , Collection <CloudEvent >> events = initMap ();
9496 operations .retrieveEvents (events );
9597 events .get (reg ).add (event );
9698 Collection <Map <EventRegistrationBuilder , CloudEvent >> result = checkCorrelation (events );
@@ -99,39 +101,43 @@ private Collection<Map<EventRegistrationBuilder, CloudEvent>> eventAdded(
99101 return result ;
100102 }
101103
102- private Map <String , List <CloudEvent >> initMap () {
104+ private Map <String , Collection <CloudEvent >> initMap () {
103105 return id2RegMapping .keySet ().stream ()
104- .collect (Collectors .toMap (k -> k , k -> new ArrayList <>()));
106+ .collect (Collectors .toMap (k -> k , k -> new LinkedHashSet <>()));
105107 }
106108
107109 private Collection <Map <EventRegistrationBuilder , CloudEvent >> startupCheck (
108110 CorrelationOperations operations ) {
109111 logger .debug ("Checking cloud events for definition {}" , definition .id ());
110112 operations .clearProcessed ();
111- Map <String , List <CloudEvent >> events = initMap ();
113+ Map <String , Collection <CloudEvent >> events = initMap ();
112114 operations .retrieveEvents (events );
113115 Collection <Map <EventRegistrationBuilder , CloudEvent >> result = checkCorrelation (events );
114116 markProcessed (operations , result );
115117 return result ;
116118 }
117119
118120 private final Collection <Map <EventRegistrationBuilder , CloudEvent >> checkCorrelation (
119- Map <String , List <CloudEvent >> events ) {
121+ Map <String , Collection <CloudEvent >> events ) {
120122 logger .debug ("Stored CloudEvents for definition {} are {}" , definition .id (), events );
121123 if (events .isEmpty ()) {
122124 return List .of ();
123125 }
124126 Collection <Map <EventRegistrationBuilder , CloudEvent >> result = new ArrayList <>();
127+ Map <String , Iterator <CloudEvent >> iteratingEvents =
128+ events .entrySet ().stream ()
129+ .collect (Collectors .toMap (Entry ::getKey , e -> e .getValue ().iterator ()));
125130 boolean notDone = true ;
126131 while (notDone ) {
127132 Map <EventRegistrationBuilder , CloudEvent > row = new HashMap <>();
128- for (Entry <String , List <CloudEvent >> item : events .entrySet ()) {
129- List <CloudEvent > list = item .getValue ();
130- if (list . isEmpty ()) {
133+ for (Entry <String , Iterator <CloudEvent >> item : iteratingEvents .entrySet ()) {
134+ Iterator <CloudEvent > iter = item .getValue ();
135+ if (! iter . hasNext ()) {
131136 notDone = false ;
132137 break ;
133138 }
134- row .put (id2RegMapping .get (item .getKey ()), list .remove (0 ));
139+ row .put (id2RegMapping .get (item .getKey ()), iter .next ());
140+ iter .remove ();
135141 }
136142 if (notDone ) {
137143 result .add (row );
0 commit comments