class FlyweightVectorSchema {

	public Iterator<VectorEntry<String, Value>> iterator(final Value[] values) {
		return new AbstractIterator2<VectorEntry<String, Value>>() {
			final Iterator<Entry<String, Integer>> keyIterator = keys.entrySet().iterator();

			@Override
			protected VectorEntry<String, Value> getNext() {
				if (keyIterator.hasNext()) {
					final Entry<String, Integer> current = keyIterator.next();
					Value value = values[current.getValue()];
					if (value == null) {
						value = NullValue.NULL;
					}
					return new ImmutableFeatureVectorEntry(current.getKey(), value);
				}
				return finished();
			}
		};
	}

	public  FlyweightVectorSchema(String... keys);
	public  FlyweightVectorSchema(FeatureInformation featureInformation);
	public  FlyweightVectorSchema(Collection<String> keys);

}