列表的可能组合

我有一个对象的arraylist,我想创建所有可能的组合(根据一组简单的规则)。 存储在列表中的每个对象都包含一个squadNumber和一个字符串。 以下是我存储的典型列表的示例:

0: 1, A 1: 1, B 2: 2, A 3: 2, B 4: 3, C 5: 3, D 6: 4, C 7: 4, D 

我想获得每个squadNumber只能出现一次的所有组合,例如:(1,A),(2,A),(3,C),(4,C)然后下一个组合将是(1的A),(2,A),(3,C),(4,d)。 我将如何在java中解决这个问题? 通常我会使用嵌套循环,但是它全部存储在一个列表中这一事实使我感到困惑。

谢谢,paintstripper

EDITED

算法如下:

  1. 按数字拆分所有小队。 所以我们有小队的名单为1,小队2的另一个名单,等等。
  2. 运行dfs。 在第n步,我们添加第n个小队。

 // Split squads by numbers, so we can iterate through each number independently. private Map> splitSquadsByNumbers(List squads) { Map> res = new HashMap>(); for (Squad squad : squads) { if (res.get(squad.getNumber()) == null) { res.put(squad.getNumber(), new ArrayList()); } res.get(squad.getNumber()).add(squad); } return res; } List squadNumbers; Map> squadsByNumbers; Stack stack; // Iterating through each squad with number squadNumbers[position] and try to add to stack, at the end pop it from stack. private void dfs(int position) { if (position == squadNumber.size()) { System.out.println(stack.toString()); } else { for (Squad squad : squadsByNumbers.get(squadNumber.get(position))) { stack.push(squad); dfs(position + 1); stack.pop(); } } } private void main(List squads) { squadsByNumbers = splitSquadsByNumbers(squads); squadNumber = new ArrayList(squadsByNumber.keySet()); Collections.sort(squadNumbers); stack = new Stack(); dfs(0); }