一个处理多值Map集合的算法

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;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值