日期:2014-05-20  浏览次数:20962 次

在一个List中放若干个Map,怎么穷举出来所有的Map的value的组合
RT:
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class Test
{
public static void main(String[] args)
{
Map<String,Integer> map1 = new LinkedHashMap<String,Integer>();
map1.put("a_1",1);
map1.put("a_2",2);

Map<String,Integer> map2 = new LinkedHashMap<String,Integer>();
map2.put("b_1",1);
map2.put("b_2",2);
map2.put("b_3",3);

Map<String,Integer> map3 = new LinkedHashMap<String,Integer>();
map3.put("c_1",1);
map3.put("c_2",2);

List<Map<String,Integer>> list = new ArrayList<Map<String,Integer>>();
list.add(map1);
list.add(map2);
list.add(map3);
//TODO
}
}

希望得到所有的val的组合,每个Map中取一个:
1-1-1
1-1-2
1-2-1
1-2-2
1-3-1
1-3-2
2-1-1
2-1-2
2-2-1
2-2-2
2-3-1
2-3-2
------解决方案--------------------

    public static void main(String[] args) {
        Map<String, Integer> map1 = new LinkedHashMap<String, Integer>();
        map1.put("a_1", 1);
        map1.put("a_2", 2);

        Map<String, Integer> map2 = new LinkedHashMap<String, Integer>();
        map2.put("b_1", 1);
        map2.put("b_2", 2);
        map2.put("b_3", 3);

        Map<String, Integer> map3 = new LinkedHashMap<String, Integer>();
        map3.put("c_1", 1);
        map3.put("c_2", 2);

        List<Map<String, Integer>> list = new ArrayList<Map<String, Integer>>();
        list.add(map1);
        list.add(map2);
        list.add(map3);
        print(list, "", 0);
    }

    public static void print(List<Map<String, Integer>> list, String pref, int i) {
        if (i == list.size()) {
            System.out.println(pref.substring(1));
        } else {
            for (Map.Entry<String, Integer> entry : list.get(i).entrySet()) {
                print(list, pref + "-" + entry.getValue(), i + 1);
            }
        }
    }