集合与集合取笛卡尔积
生活随笔
收集整理的這篇文章主要介紹了
集合与集合取笛卡尔积
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
public static void run(List<List<String>> dimvalue, List<String> result, int layer, String curstring) {//大于一個(gè)集合時(shí):if (layer < dimvalue.size() - 1) {//大于一個(gè)集合時(shí),第一個(gè)集合為空if (dimvalue.get(layer).size() == 0)run(dimvalue, result, layer + 1, curstring);else {for (int i = 0; i < dimvalue.get(layer).size(); i++) {StringBuilder s1 = new StringBuilder();s1.append(curstring);s1.append(dimvalue.get(layer).get(i));run(dimvalue, result, layer + 1, s1.toString());}}}//只有一個(gè)集合時(shí):else if (layer == dimvalue.size() - 1) {//只有一個(gè)集合,且集合中沒(méi)有元素if (dimvalue.get(layer).size() == 0)result.add(curstring);//只有一個(gè)集合,且集合中有元素時(shí):其笛卡爾積就是這個(gè)集合元素本身else {for (int i = 0; i < dimvalue.get(layer).size(); i++) {result.add(curstring + dimvalue.get(layer).get(i));}}}
}/*** @param args*/
public static void main(String[] args) {List<List<String>> dimvalue = new ArrayList<>();List<String> v1 = new ArrayList<>();v1.add("a");v1.add("b");List<String> v2 = new ArrayList<>();v2.add("c");v2.add("d");v2.add("e");List<String> v3 = new ArrayList<>();v3.add("f");v3.add("g");dimvalue.add(v1);dimvalue.add(v2);dimvalue.add(v3);List<String> result = new ArrayList<>();BaseReqForm.run(dimvalue, result, 0, "");int i = 1;for (String s : result) {System.out.println(i++ + ":" + s);}
}
摘自:http://blog.chinaunix.net/uid-21125022-id-4392818.html
以下兩種是實(shí)際場(chǎng)景因需求改造練手略加改變,正好加深我的印象
1、組合后返回原格式
private static void tst(List<List<String>> dimvalue, List<List<String>> result, int layer, List<String> curstring) {//大于一個(gè)集合時(shí):if (layer < dimvalue.size() - 1) {//大于一個(gè)集合時(shí),第一個(gè)集合為空if (dimvalue.get(layer).size() == 0)tst(dimvalue, result, layer + 1, curstring);else {for (int i = 0; i < dimvalue.get(layer).size(); i++) {List<String> s1 = new ArrayList<>();if (CollectionUtils.isNotEmpty(curstring))s1.addAll(curstring);s1.add(dimvalue.get(layer).get(i));tst(dimvalue, result, layer + 1, s1);}}}//只有一個(gè)集合時(shí):else if (layer == dimvalue.size() - 1) {//只有一個(gè)集合,且集合中沒(méi)有元素if (dimvalue.get(layer).size() == 0)result.add(curstring);else {//只有一個(gè)集合,且集合中有元素時(shí):其笛卡爾積就是這個(gè)集合元素本身for (int i = 0; i < dimvalue.get(layer).size(); i++) {List<String> list = new ArrayList<>(curstring);list.add(dimvalue.get(layer).get(i));result.add(list);}}}}?
2、逗號(hào)隔開(kāi)方式
private void cartesianItemCode(List<List<String>> dimvalue, List<String> result, int layer, String curstring) {//大于一個(gè)集合時(shí):if (layer < dimvalue.size() - 1) {//大于一個(gè)集合時(shí),第一個(gè)集合為空if (dimvalue.get(layer).size() == 0)cartesianItemCode(dimvalue, result, layer + 1, curstring);else {for (int i = 0; i < dimvalue.get(layer).size(); i++) {StringBuilder s1 = new StringBuilder();s1.append(curstring);if (StringUtils.isNotBlank(curstring)) s1.append(",");s1.append(dimvalue.get(layer).get(i));cartesianItemCode(dimvalue, result, layer + 1, s1.toString());}}}//只有一個(gè)集合時(shí):else if (layer == dimvalue.size() - 1) {//只有一個(gè)集合,且集合中沒(méi)有元素if (dimvalue.get(layer).size() == 0)result.add(curstring);//只有一個(gè)集合,且集合中有元素時(shí):其笛卡爾積就是這個(gè)集合元素本身else {for (int i = 0; i < dimvalue.get(layer).size(); i++) {result.add(curstring + "," + dimvalue.get(layer).get(i));}}}}?
轉(zhuǎn)載于:https://www.cnblogs.com/liuye007/p/10667660.html
總結(jié)
以上是生活随笔為你收集整理的集合与集合取笛卡尔积的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: xsync
- 下一篇: SpringBoot_定制banner