package net.sf.colossus.util;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Returns all possible combinations of n elements of a List.
*
* @author David Ripton
*/
public final class Combos<T>
{
private final List<List<T>> retlist;
public Combos(List<T> list, int n)
{
retlist = new ArrayList<List<T>>();
findCombinations(list, n, new ArrayList<T>());
}
private void findCombinations(List<T> alist, int n, List<T> blist)
{
if (n < 0 || n > alist.size())
{
return;
}
if (n == 0)
{
List<T> copy = new ArrayList<T>();
copy.addAll(blist);
retlist.add(copy);
return;
}
for (int i = 0; i < alist.size(); i++)
{
blist.add(alist.get(i));
List<T> sub = alist.subList(i + 1, alist.size());
List<T> subclone = new ArrayList<T>();
subclone.addAll(sub);
findCombinations(subclone, n - 1, blist);
blist.remove(blist.size() - 1);
}
}
public Iterator<List<T>> iterator()
{
return retlist.iterator();
}
}