class ExactMatcherSearch {

    public MultiMap<Value, T, List<T>> search() {

        if (matcher.isNegate()) {

            if (map.containsKey(matcher.getValue())) {

                return MultiMap.merge(map.subMap(map.firstKey(), true,
                                                 matcher.getValue(), false),
                                      map.subMap(matcher.getValue(), false,
                                                 map.lastKey(), true));
            } else {
                return map;
            }
        } else {
            return map.subMap(matcher.getValue(), true,
                              matcher.getValue(), true);
        }
    }

    public  ExactMatcherSearch(final ExactMatcher matcher,
                              final MultiMap<Value, T, List<T>> map);

}