package org.rr.commons.collection; import java.util.AbstractSet; import java.util.Iterator; import java.util.Set; /** * List that allows to transform it values * * @param <T> The target, transformed type. * @param <S> The source type. */ public abstract class TransformValueSet<S, T> extends AbstractSet<T> { Set<S> set; public TransformValueSet(Set<S> sourceValuesSet) { this.set = sourceValuesSet; } public abstract T transform(S source); @Override public int size() { return set.size(); } @Override public Iterator<T> iterator() { final Iterator<S> iterator = set.iterator(); return new Iterator<T>() { @Override public boolean hasNext() { return iterator.hasNext(); } @Override public T next() { return transform(iterator.next()); } @Override public void remove() { iterator.remove(); } }; } }