package com.java.timer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class TestMap {
public static void main(String[] args) {
int count = 1;
List<Map<String, String>> resultListMap = new ArrayList<Map<String, String>>();
Map<String, String> map = new HashMap<String, String>();
List<Map<String, String>> listMap = new ArrayList<Map<String, String>>();
map.put("flag1", "a,b,c");
map.put("flag2", "d,e");
map.put("flag3", "f,g");
for (Entry<String, String> entry : map.entrySet()) {
String[] values = entry.getValue().split(",");
count = count * values.length;
for (String value : values) {
Map<String, String> map2 = new HashMap<String, String>();
map2.put(entry.getKey(), value);
listMap.add(map2);
}
}
List<Map<String, String>> targetList = new ArrayList<Map<String,String>>();
int sum = map.size();
List<Map<String, String>> maps = getList(count, sum, listMap);
for (Map<String, String> map2 : maps) {
if (map2.size() == sum) {
targetList.add(map2);
}
}
int num = 1;
for (Map<String, String> map2 : targetList) {
System.out.println("======" + (num++) + "======");
for(Entry<String, String> entry : map2.entrySet()){
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
}
private static List<Map<String, String>> getList(int count, int sum,
List<Map<String, String>> listMap) {
if (isCount(sum, listMap)) {
return listMap;
} else {
List<Map<String, String>> listMap2 = new ArrayList<Map<String, String>>();
for (Map<String, String> map : listMap) {
for (Map<String, String> map2 : listMap) {
Map<String, String> map3 = new HashMap<String, String>();
map3.putAll(map2);
map3.putAll(map);
if (!isContain(map3, listMap2)) {
listMap2.add(map3);
}
}
}
listMap.clear();
listMap.addAll(listMap2);
return getList(count, sum, listMap);
}
}
private static boolean isCount(int sum, List<Map<String, String>> listMap) {
for (Map<String, String> map : listMap) {
if (map.size() == sum) {
return true;
}
}
return false;
}
private static boolean isContain(Map<String, String> map4,
List<Map<String, String>> resultListMap) {
boolean falg = false;
for (Map<String, String> map : resultListMap) {
if (map.equals(map4)) {
return true;
}
}
return falg;
}
}
一个处理多值Map集合的算法
最新推荐文章于 2022-05-13 10:20:15 发布