@Test
public void testDescardMap(){
Map<String, Object> colormap = Maps.newHashMap();
colormap.put("id","1");
colormap.put("name","红色");
Map<String, Object> colormap1 = Maps.newHashMap();
colormap1.put("id","2");
colormap1.put("name","黑色");
Map<String, Object> colormap2 = Maps.newHashMap();
colormap2.put("id","3");
colormap2.put("name","金色");
List<Map> colorList = Arrays.asList(colormap, colormap1, colormap2);
Map<String, Object> sizemap = Maps.newHashMap();
sizemap.put("ml","750ml");
sizemap.put("size","32G");
Map<String, Object> sizemap1 = Maps.newHashMap();
sizemap1.put("ml","400ml");
sizemap1.put("size","64G");
List<Map> sizeList = Arrays.asList(sizemap, sizemap1);
Map<String, Object> placemap = Maps.newHashMap();
placemap.put("place","国产");
Map<String, Object> placemap1 = Maps.newHashMap();
placemap1.put("place","进口");
List<Map> placeList = Arrays.asList(placemap, placemap1);
//对颜色、大小、产地三个集合进行笛卡尔积组合
List<Map> descartesList = descartesMap(colorList, sizeList, placeList);
descartesList.forEach(System.out::println);
}
public static List<Map> descartesMap(List<Map>... lists) {
List<Map> tempList = new ArrayList<>();
Integer i = 0 ;
for (List<Map> list : lists) {
if (tempList.isEmpty()) {
tempList = list;
} else {
System.out.println("要组合的list,第"+i+"次组合"+JSON.toJSONString(tempList));
System.out.println("==============第"+i+"次组合结果===============");
//java8新特性,stream流的flatMap ,可以对list集合做并集、交集、差集
tempList = tempList.stream().flatMap(item -> list.stream().map(item2 -> {
Map<String, Object> map = Maps.newHashMap();
StringBuffer strKeysBuf = new StringBuffer();
StringBuffer strValsBuf = new StringBuffer();
item.forEach((k,v)->{
//key值以逗号拼接
strKeysBuf.append(k).append(",");
//value以空格拼接
strValsBuf.append(v).append(" ");
});
item2.forEach((k,v)->{
strKeysBuf.append(k).append(",");
strValsBuf.append(v).append(" ");
});
//去掉最后一个逗号和空格
String strKeys = strKeysBuf.deleteCharAt(strKeysBuf.length() - 1).toString();
String strVals = strValsBuf.deleteCharAt(strValsBuf.length() - 1).toString();
map.put(strKeys,strVals);
System.out.println(JSON.toJSONString(map));
return map;
})).collect(Collectors.toList());
}
i++;
}
return tempList;
}
要组合的list,第1次组合[{"name":"红色","id":"1"},{"name":"黑色","id":"2"},{"name":"金色","id":"3"}]
==============第1次组合结果===============
{"name,id,size,ml":"红色 1 32G 750ml"}
{"name,id,size,ml":"红色 1 64G 400ml"}
{"name,id,size,ml":"黑色 2 32G 750ml"}
{"name,id,size,ml":"黑色 2 64G 400ml"}
{"name,id,size,ml":"金色 3 32G 750ml"}
{"name,id,size,ml":"金色 3 64G 400ml"}
要组合的list,第2次组合[{"name,id,size,ml":"红色 1 32G 750ml"},{"name,id,size,ml":"红色 1 64G 400ml"},{"name,id,size,ml":"黑色 2 32G 750ml"},{"name,id,size,ml":"黑色 2 64G 400ml"},{"name,id,size,ml":"金色 3 32G 750ml"},{"name,id,size,ml":"金色 3 64G 400ml"}]
==============第2次组合结果===============
{"name,id,size,ml,place":"红色 1 32G 750ml 国产"}
{"name,id,size,ml,place":"红色 1 32G 750ml 进口"}
{"name,id,size,ml,place":"红色 1 64G 400ml 国产"}
{"name,id,size,ml,place":"红色 1 64G 400ml 进口"}
{"name,id,size,ml,place":"黑色 2 32G 750ml 国产"}
{"name,id,size,ml,place":"黑色 2 32G 750ml 进口"}
{"name,id,size,ml,place":"黑色 2 64G 400ml 国产"}
{"name,id,size,ml,place":"黑色 2 64G 400ml 进口"}
{"name,id,size,ml,place":"金色 3 32G 750ml 国产"}
{"name,id,size,ml,place":"金色 3 32G 750ml 进口"}
{"name,id,size,ml,place":"金色 3 64G 400ml 国产"}
{"name,id,size,ml,place":"金色 3 64G 400ml 进口"}
==============最终结果=============
{name,id,size,ml,place=红色 1 32G 750ml 国产}
{name,id,size,ml,place=红色 1 32G 750ml 进口}
{name,id,size,ml,place=红色 1 64G 400ml 国产}
{name,id,size,ml,place=红色 1 64G 400ml 进口}
{name,id,size,ml,place=黑色 2 32G 750ml 国产}
{name,id,size,ml,place=黑色 2 32G 750ml 进口}
{name,id,size,ml,place=黑色 2 64G 400ml 国产}
{name,id,size,ml,place=黑色 2 64G 400ml 进口}
{name,id,size,ml,place=金色 3 32G 750ml 国产}
{name,id,size,ml,place=金色 3 32G 750ml 进口}
{name,id,size,ml,place=金色 3 64G 400ml 国产}
{name,id,size,ml,place=金色 3 64G 400ml 进口}