遇到的类似笛卡尔积的问题

遇到的有关笛卡尔积的问题记录

package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

/**
 * @author xiang
 * @date 2022/12/7-15:04
 */
public class SplitTools {
    /**
     * 计算 多个集合的笛卡尔积
     *
     * @param dimValues 存储多个集合的 二维list
     * @return
     */

    private static ArrayList descartes(ArrayList<ArrayList> dimValues) {

        ArrayList result = new ArrayList();

        for (int i = 0; i < dimValues.size(); i++) {

            ArrayList<String> curList = dimValues.get(i);

            if (0 == i) {//如果是首个集合,直接放输入到结果集中

                for (String tempStr : curList) {

                    result.add(tempStr);

                }

                continue;

            }

            selfCopy(result, curList);//将前一个集合的乘积 result,自我复制 curListCount 份,并将当前集合的元素追加到上边

        }

        return result;

    }

    /**
     * 根据当前的集合,将之前的结果集复制
     *
     * @param result    之前的集合相称的结果集
     * @param curList   当前集合
     */

    private static void selfCopy(ArrayList<String> result, ArrayList<String> curList) {

        ArrayList<String> tempList = new ArrayList();

        for (String strOfCurList : curList) {

            for (String strOfResult : result) {

                tempList.add(strOfResult + strOfCurList);//因为这里是字符串集合相称,那么其实就是字符串相加。

            }

        }

        result.clear();

        for (String tempStr : tempList) {

            result.add(tempStr);

        }

    }

    public static void main(String[] args) throws Exception {
        int count = 0;

        List<String> ls = org.apache.commons.io.FileUtils.readLines(new File("C:\\idea\\temp.txt"));
        System.out.println("写入成功");
        if (ls.size() == 0) {
            System.out.println("文本为空");
        } else {
//            while (ls.iterator().next().length() != 0) {

            for (int j = 0; j < ls.size(); j++) {
                String str = ls.get(j);

                String[] split = str.trim().split(",");

                ArrayList a1 = new ArrayList();
                for (int i = 0; i < split[0].length(); i++) {
                    a1.add(String.valueOf(split[0].charAt(i)));
                }
                ArrayList a2 = new ArrayList();
                for (int i = 0; i < split[1].length(); i++) {
                    a2.add(String.valueOf(split[1].charAt(i)));
                }
                ArrayList a3 = new ArrayList();
                for (int i = 0; i < split[2].length(); i++) {
                    a3.add(String.valueOf(split[2].charAt(i)));
                }

                ArrayList a4 = new ArrayList();
                for (int i = 0; i < split[3].length(); i++) {
                    a4.add(String.valueOf(split[3].charAt(i)));
                }

                ArrayList a5 = new ArrayList();
                for (int i = 0; i < split[4].length(); i++) {
                    a5.add(String.valueOf(split[4].charAt(i)));
                }
                ArrayList a6 = new ArrayList();
                for (int i = 0; i < split[5].length(); i++) {
                    a6.add(String.valueOf(split[5].charAt(i)));
                }
                ArrayList a7 = new ArrayList();
                for (int i = 0; i < split[6].length(); i++) {
                    a7.add(String.valueOf(split[6].charAt(i)));
                }
                ArrayList a8 = new ArrayList();
                for (int i = 0; i < split[7].length(); i++) {
                    a8.add(String.valueOf(split[7].charAt(i)));
                }
                ArrayList a9 = new ArrayList();
                for (int i = 0; i < split[8].length(); i++) {
                    a9.add(String.valueOf(split[8].charAt(i)));
                }
                ArrayList a10 = new ArrayList();
                for (int i = 0; i < split[9].length(); i++) {
                    a10.add(String.valueOf(split[9].charAt(i)));
                }
                ArrayList a11 = new ArrayList();
                for (int i = 0; i < split[10].length(); i++) {
                    a11.add(String.valueOf(split[10].charAt(i)));
                }
                ArrayList a12 = new ArrayList();
                for (int i = 0; i < split[11].length(); i++) {
                    a12.add(String.valueOf(split[11].charAt(i)));
                }
                ArrayList a13 = new ArrayList();
                for (int i = 0; i < split[12].length(); i++) {
                    a13.add(String.valueOf(split[12].charAt(i)));
                }
                ArrayList a14 = new ArrayList();
                for (int i = 0; i < split[13].length(); i++) {
                    a14.add(String.valueOf(split[13].charAt(i)));
                }


                ArrayList<ArrayList> dimValue = new ArrayList();

                dimValue.add(a1);
                dimValue.add(a2);
                dimValue.add(a3);
                dimValue.add(a4);
                dimValue.add(a5);
                dimValue.add(a6);
                dimValue.add(a7);
                dimValue.add(a8);
                dimValue.add(a9);//三个元素
                dimValue.add(a10);
                dimValue.add(a11);
                dimValue.add(a12);
                dimValue.add(a13);
                dimValue.add(a14);//三个元素

                ArrayList<String> result = descartes(dimValue);


                for (String temp : result) {

//                        System.out.println(temp);

                    org.apache.commons.io.FileUtils.writeStringToFile(new File("C:\\idea\\Split.txt"), temp + "\n", true);

                    count++;
                }

            }
            System.out.println(count);


        }
//        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值