在一个List中放若干个Map,怎么穷举出来所有的Map的value的组合

时间:2022-04-27 19:32:55
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

4 个解决方案

#1


你还不认后台处理好,页面直接显示。

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

#3


import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

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

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

List<String> res = new ArrayList<String>();
print(list, "", 0,res);

for(String s : res)
{
System.out.println(s);
}
}
}

#4



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);
aaa(list,0,"");
}
//
public static void aaa(List<Map<String,Integer>> list,int i,String line){
Map<String,Integer> map = list.get(i);
ArrayList<String> list1 = new ArrayList<String>(map.keySet());
if(i<list.size()-1){
for(int j=0;j<list1.size();j++){
String line1 = line;
int k = i+1;
line1 += map.get(list1.get(j));
aaa(list,k,line1);
}
}else{
for(int j=0;j<list1.size();j++){
System.out.println(line+map.get(list1.get(j)));
}
return;
}
}
}

#1


你还不认后台处理好,页面直接显示。

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

#3


import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

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

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

List<String> res = new ArrayList<String>();
print(list, "", 0,res);

for(String s : res)
{
System.out.println(s);
}
}
}

#4



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);
aaa(list,0,"");
}
//
public static void aaa(List<Map<String,Integer>> list,int i,String line){
Map<String,Integer> map = list.get(i);
ArrayList<String> list1 = new ArrayList<String>(map.keySet());
if(i<list.size()-1){
for(int j=0;j<list1.size();j++){
String line1 = line;
int k = i+1;
line1 += map.get(list1.get(j));
aaa(list,k,line1);
}
}else{
for(int j=0;j<list1.size();j++){
System.out.println(line+map.get(list1.get(j)));
}
return;
}
}
}