public Object evaluateEnumMethod(EventBean[] eventsLambda, Collection target, boolean isNewData, ExprEvaluatorContext context) {
if (target.isEmpty()) {
return target;
}
ObjectArrayEventBean evalEvent = new ObjectArrayEventBean(new Object[1], evalEventType);
ObjectArrayEventBean indexEvent = new ObjectArrayEventBean(new Object[1], indexEventType);
if (target.size() == 1) {
Object item = target.iterator().next();
evalEvent.getProperties()[0] = item;
eventsLambda[streamNumLambda] = evalEvent;
indexEvent.getProperties()[0] = 0;
eventsLambda[streamNumLambda + 1] = indexEvent;
Object pass = innerExpression.evaluate(eventsLambda, isNewData, context);
if (pass == null || (!(Boolean) pass)) {
return Collections.emptyList();
}
return Collections.singletonList(item);
}
int size = target.size();
Object[] all = new Object[size];
int count = 0;
for (Object item : target) {
all[count++] = item;
}
ArrayDeque<Object> result = new ArrayDeque<Object>();
int index = 0;
for (int i = all.length - 1; i >= 0; i--) {
evalEvent.getProperties()[0] = all[i];
eventsLambda[streamNumLambda] = evalEvent;
indexEvent.getProperties()[0] = index++;
eventsLambda[streamNumLambda + 1] = indexEvent;
Object pass = innerExpression.evaluate(eventsLambda, isNewData, context);
if (pass == null || (!(Boolean) pass)) {
break;