gpt4 book ai didi

java - 从存储在 HashMap 中的字符串数组列表生成字符串组合

转载 作者:行者123 更新时间:2023-12-01 15:40:19 26 4
gpt4 key购买 nike

我有一个java Hash,结构是这样的:

HashMap<Integer, ArrayList<String>> finalMap = new HashMap<Integer, ArrayList<String>>();

finalMap.toString() 是这样的

{0=[a1, a2, a3, a4], 1=[b1, b2, b3], 2=[c1, c2], 3=[d1]}

我需要生成这样的所有组合:

1. a1 b1 c1 d1
2. a1 b1 c2 d1
3. a1 b2 c1 d1
4. a1 b2 c2 d1
5. a1 b3 c1 d1
6. a1 b3 c2 d1
...
...
...
...
...

提前致谢。

最佳答案

简单地暴力破解所有元素并跳过重复项(由 HashSet 自动完成)。有更好的方法来连接字符串,但要保持简单:

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、a 3b3c1d1、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、a 3b3c1d1、a2b2c1d1、a4b1c1d1、a4b3c1d1、a4b2c1d1、a3b1c2d1、a2b3c1d1、a3b1c1d1、a4b2c2d1、a2b1c1d1、 a3b2c2d1]

关于java - 从存储在 HashMap 中的字符串数组列表生成字符串组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8154916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com