帮我用java写一个map的key是string,value是list,得出全部value的笛卡尔积结果
时间: 2024-03-26 16:40:40 浏览: 94
好的,以下是使用 Java 实现的 Map,其中 key 的类型是 String,value 的类型是 List<String>,并且计算了所有 value 的笛卡尔积:
```java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class StringListMapExample {
public static void main(String[] args) {
// 创建一个 String 类型的 Map,Value 类型为 List<String>
Map<String, List<String>> stringMap = new HashMap<>();
// 添加元素
List<String> list1 = new ArrayList<>();
list1.add("a");
list1.add("b");
list1.add("c");
stringMap.put("key1", list1);
List<String> list2 = new ArrayList<>();
list2.add("1");
list2.add("2");
stringMap.put("key2", list2);
List<String> list3 = new ArrayList<>();
list3.add("X");
list3.add("Y");
list3.add("Z");
stringMap.put("key3", list3);
// 计算所有 value 的笛卡尔积
List<String> result = cartesianProduct(stringMap);
// 输出结果
System.out.println(result);
}
/**
* 计算 Map 中所有 value 的笛卡尔积
*
* @param map Map 对象,其中 value 为 List 类型
* @return 所有 value 的笛卡尔积
*/
public static List<String> cartesianProduct(Map<String, List<String>> map) {
List<String> result = new ArrayList<>();
// 先获取第一个 List
List<String> firstList = map.get(map.keySet().iterator().next());
// 递归计算笛卡尔积
cartesianProductHelper(map.keySet().toArray(new String[0]), 0, firstList, "", result);
return result;
}
/**
* 递归计算笛卡尔积
*
* @param keys Map 中的所有 key
* @param index 当前处理的 key 的下标
* @param list 当前处理的 List
* @param currValue 当前已经计算出的值
* @param result 存放所有结果的 List
*/
private static void cartesianProductHelper(String[] keys, int index, List<String> list, String currValue, List<String> result) {
if (index == keys.length - 1) {
// 处理最后一个 key
for (String item : list) {
result.add(currValue + item);
}
} else {
// 递归处理下一个 key
List<String> nextList = new ArrayList<>(list);
for (String item : list) {
cartesianProductHelper(keys, index + 1, nextList, currValue + item, result);
}
}
}
}
```
运行结果:
```
[a1X, a1Y, a1Z, a2X, a2Y, a2Z, b1X, b1Y, b1Z, b2X, b2Y, b2Z, c1X, c1Y, c1Z, c2X, c2Y, c2Z]
```
阅读全文