import static java.util.Arrays.asList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Random; import com.google.common.collect.AbstractIterator; public class Sample { public static Iterator sOfN(final Integer sampleSize, final Integer populationSize, final Iterator populationItems) { return new AbstractIterator() { Integer n = sampleSize; Integer N = populationSize; Integer t = 0; Integer m = 0; Random random = new Random(); @Override protected T computeNext() { while (m= n-m) { t++; } else { t++; m++; return next; } } return endOfData(); } }; } public static void main(String[] args) { int[] result = new int[10]; List digits = asList(0,1,2,3,4,5,6,7,8,9); for (int i=0; i<100000; i++) { Iterator sample = Sample.sOfN(3, 10, digits.iterator()); while(sample.hasNext()) { result[sample.next()]++; } } System.out.println(Arrays.toString(result)); } }