This function seems a little too verbose. Suggest something more like:

        for (Index index : candidates) {
            if (checkIndex(index, aggExpr, filterExprs)) {
                return index;
            }
        }
        return null;