public void finish() {
		for (Entry<String, Collector<?, ?, ?>> ee : coll.entrySet()) {
			Collector<?, ?, ?> collector = ee.getValue();
			@SuppressWarnings("unchecked")
			Function<Object, Object> finisher = (Function<Object, Object>) collector.finisher();
			
			Object value = values.get(ee.getKey());
			Objects.requireNonNull(value, "Internal error. Value is null. Is hashcode implemented correctly?");
			
			Object newValue = finisher.apply(value);
			if (!values.containsKey(ee.getKey())) {
				throw new AssertionError();
			}
			values.put(ee.getKey(), newValue);
		}
	}