获取多个集合笛卡尔积
电商中典型业务场景:商品搜索
- 单属性属性值之间为并查询
- 不同属性的属性值之间查询为与查询
import java.util.ArrayList;
import java.util.List;
/**
* Created with IntelliJ IDEA.
*
* @author: bakerZhu
* @description: 获取集合笛卡尔积
* @time: 2018年08月20日
* @modifytime:
*/
public class Descartes {
public static void descartes(List<List<Long>> dimvalue, List<List<Long>> result, int layer, List<Long> curList) {
if (layer < dimvalue.size() - 1) {
if (dimvalue.get(layer).size() == 0) {
descartes(dimvalue, result, layer + 1, curList);
} else {
for (int i = 0; i < dimvalue.get(layer).size(); i++) {
List<Long> list = new ArrayList<Long>(curList);
list.add(dimvalue.get(layer).get(i));
descartes(dimvalue, result, layer + 1, list);
}
}
} else if (layer == dimvalue.size() - 1) {
if (dimvalue.get(layer).size() == 0) {
result.add(curList);
} else {
for (int i = 0; i < dimvalue.get(layer).size(); i++) {
List<Long> list = new ArrayList<Long>(curList);
list.add(dimvalue.get(layer).get(i));
result.add(list);
}
}
}
}
}