package de.invesdwin.util.math.decimal.internal.randomize;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import javax.annotation.concurrent.ThreadSafe;
import org.apache.commons.math3.random.RandomAdaptor;
import org.apache.commons.math3.random.RandomGenerator;
import de.invesdwin.util.math.decimal.ADecimal;
import de.invesdwin.util.math.decimal.IDecimalAggregate;
@ThreadSafe
public class ShuffleRandomizer<E extends ADecimal<E>> implements IDecimalRandomizer<E> {
private final List<E> sample;
public ShuffleRandomizer(final IDecimalAggregate<E> parent) {
this.sample = parent.values();
}
@Override
public Iterator<E> randomize(final RandomGenerator random) {
final List<E> sampleCopy = new ArrayList<E>(sample);
Collections.shuffle(sampleCopy, new RandomAdaptor(random));
return sampleCopy.iterator();
}
}