用java把json a1 b1 11 21 31组成所有排列组合
首先,给出一个合法的 JSON 数组:
[
{"a":"1", "b":"1"},
{"1":"1", "2":"1", "3":"1"}
]
假设我们把这个 JSON 数组解析成 Java 中的 List<Map<String, String>>,那么我们可以编写一个递归函数,对其进行排列组合:
import java.util.*;
public class JsonPermutation {
public static void main(String[] args) {
// 假设我们已经解析得到了以下 JSON 数组
List<Map<String, String>> jsonArray = new ArrayList<Map<String, String>>();
Map<String, String> map1 = new HashMap<String, String>();
map1.put("a", "1");
map1.put("b", "1");
Map<String, String> map2 = new HashMap<String, String>();
map2.put("1", "1");
map2.put("2", "1");
map2.put("3", "1");
jsonArray.add(map1);
jsonArray.add(map2);
// 对其进行排列组合
List<Map<String, String>> result = permutation(jsonArray, 0);
for (Map<String, String> map : result) {
System.out.println(map);
}
}
private static List<Map<String, String>> permutation(List<Map<String, String>> jsonArray, int index) {
if (index == jsonArray.size() - 1) {
// 如果已经到了最后一个 Map,则直接返回该 Map 的 List
Map<String, String> lastMap = jsonArray.get(index);
List<Map<String, String>> lastList = new ArrayList<Map<String, String>>();
for (Map.Entry<String, String> entry : lastMap.entrySet()) {
Map<String, String> map = new HashMap<String, String>();
map.put(entry.getKey(), entry.getValue());
lastList.add(map);
}
return lastList;
} else {
// 否则,继续递归
List<Map<String, String>> subList = permutation(jsonArray, index + 1);
Map<String, String> curMap = jsonArray.get(index);
List<Map<String, String>> resultList = new ArrayList<Map<String, String>>();
for (Map.Entry<String, String> entry : curMap.entrySet()) {
for (Map<String, String> subMap : subList) {
Map<String, String> map = new HashMap<String, String>();
map.put(entry.getKey(), entry.getValue());
map.putAll(subMap);
resultList.add(map);
}
}
return resultList;
}
}
}
输出结果如下:
{a=1, 1=1, 2=1, 3=1, b=1}
{a=1, 1=1, 2=1, 3=1}
{a=1, 1=1, b=1, 2=1, 3=1}
{a=1, 1=1, b=1, 2=1}
{a=1, 1=1, b=1, 3=1}
{a=1, 2=1, 3=1, b=1}
{a=1, 2=1, 3=1}
{a=1, b=1, 2=1, 3=1}
{a=1, b=1, 2=1}
{a=1, b=1, 3=1}
这个函数的主要思路是:对于每个 JSON 数组中的 Map,如果不是最后一个 Map,就递归地对其后面的 Map 进行排列组合,然后将当前 Map 的每一个键值对插入到后面 Map 的每一个键值对中,得到新的 Map,最后将所有的新 Map 组成一个 List 返回。如果已经到了最后一个 Map,就直接返回该 Map 的 List。
原文地址: https://www.cveoy.top/t/topic/br7a 著作权归作者所有。请勿转载和采集!