簡單地暴露所有元素並跳過重複項(由HashSet自動完成)。有更好的方法來Concat的字符串,但保持它簡單:
HashSet<String> result = new HashSet<String>();
for (String a : finalMap.get(0)) {
for (String b : finalMap.get(1)) {
for (String c : finalMap.get(2)) {
for (String d : finalMap.get(3)) {
result.add(a + b + c + d);
}
}
}
}
System.out.println(result);
輸出應該像
[a3b2c1d1, a1b3c1d1, a1b1c1d1, a1b2c2d1, a4b1c2d1, a4b3c2d1, a1b2c1d1, a2b1c2d1, a2b2c2d1, a3b3c2d1, a1b1c2d1, a1b3c2d1, a2b3c2d1, a3b3c1d1, a2b2c1d1, a4b1c1d1, a4b3c1d1, a4b2c1d1, a3b1c2d1, a2b3c1d1, a3b1c1d1, a4b2c2d1, a2b1c1d1, a3b2c2d1]
但是,如果你不知道名單的總量又或者他們可能會有所不同,你可能使用遞歸的方法
void generate(HashSet<String> resultList, String resultString,
int listNum, HashMap<Integer, ArrayList<String>> data) {
if (listNum == 0) {
// start: begin a new resultString
for (int i = 0; i < data.get(listNum).size(); i++) {
generate(resultList, data.get(listNum).get(i), listNum + 1,
data);
}
} else if (listNum == data.size() - 1) {
// end: store completed resultStrings
for (int i = 0; i < data.get(listNum).size(); i++) {
resultList.add(resultString + data.get(listNum).get(i));
}
} else {
// middlepart: append current string to given resultString
for (int i = 0; i < data.get(listNum).size(); i++) {
generate(resultList, resultString + data.get(listNum).get(i),
listNum + 1, data);
}
}
}
稱爲如下:
HashSet<String> result = new HashSet<String>();
generate(result2, null, 0, finalMap);
System.out.println(result);
輸出也應該像
[a3b2c1d1, a1b3c1d1, a1b1c1d1, a1b2c2d1, a4b1c2d1, a4b3c2d1, a1b2c1d1, a2b1c2d1, a2b2c2d1, a3b3c2d1, a1b1c2d1, a1b3c2d1, a2b3c2d1, a3b3c1d1, a2b2c1d1, a4b1c1d1, a4b3c1d1, a4b2c1d1, a3b1c2d1, a2b3c1d1, a3b1c1d1, a4b2c2d1, a2b1c1d1, a3b2c2d1]
你嘗試過什麼了嗎? – khr055
雖然在hashmap上迭代,但我不明白如何遍歷所有元素 – Elvis
請發佈代碼,你有問題。一般而言,在不顯示任何努力的情況下尋求完整的解決方案並不受歡迎。 –