public StreamEvent find(StateEvent matchingEvent, IndexedEventHolder indexedEventHolder, StreamEventCloner
            storeEventCloner) {

        Collection<StreamEvent> leftStreamEvents = leftCollectionExecutor.findEvents(matchingEvent, indexedEventHolder);
        if (leftStreamEvents == null) {
            return exhaustiveCollectionExecutor.find(matchingEvent, indexedEventHolder, storeEventCloner);
        } else {
            Collection<StreamEvent> rightStreamEvents = rightCollectionExecutor.findEvents(matchingEvent,
                    indexedEventHolder);
            if (rightStreamEvents == null) {
                return exhaustiveCollectionExecutor.find(matchingEvent, indexedEventHolder, storeEventCloner);
            } else {
                ComplexEventChunk<StreamEvent> returnEventChunk = new ComplexEventChunk<>();
                for (StreamEvent resultEvent : leftStreamEvents) {
                    if (storeEventCloner != null) {
                        returnEventChunk.add(storeEventCloner.copyStreamEvent(resultEvent));
                    } else {
                        returnEventChunk.add(resultEvent);
                    }
                }
                for (StreamEvent resultEvent : rightStreamEvents) {
                    if (!leftStreamEvents.contains(resultEvent)) {
                        if (storeEventCloner != null) {
                            returnEventChunk.add(storeEventCloner.copyStreamEvent(resultEvent));
                        } else {
                            returnEventChunk.add(resultEvent);
                        }
                    }
                }
                return returnEventChunk.getFirst();
            }
        }


    }
Implementation of {@link CollectionExecutor} which handles or condition
modules/siddhi-core/src/main/java/io/siddhi/core/util/collection/executor/OrCollectionExecutor.java