private function applyClosures($data)
    {
        if (!empty($this->filterClosures)) {
            $data = array_filter($data, function ($datum) {
                foreach ($this->filterClosures as $closure) {
                    if (!$closure($datum)) {
                        return false;
                    }
                }

                return true;
            });
        }

        if (!empty($this->sortClosures)) {
            uasort($data, function($rowA, $rowB) {
                foreach ($this->sortClosures as $closure) {
                    if (0 != $result = $closure($rowA, $rowB)) {
                        return $result;
                    }
                }

                return 0;
            });
        }

        if ($this->identifiersClosures) {
            $data = array_filter($data, $this->identifiersClosures, ARRAY_FILTER_USE_KEY);
        }

        return $data;
    }