Java 生成名称置换并将其转换为数据库

Java 生成名称置换并将其转换为数据库,java,mysql,algorithm,Java,Mysql,Algorithm,使用“”作为引用,我试图让我的程序(在检测到名称字段时)将名称的所有组合写入数据库(queryID aka qid不是主键。我希望所有组合都是重复的) 例子:约翰·迈克尔·多伊 无名氏 约翰·多伊·迈克尔 迈克尔·约翰·多伊 迈克尔·多伊·约翰 约翰·迈克尔 迈克尔·约翰 为了让您更好地了解情况,当有人使用我的程序进行搜索时,他们可以添加“约束” 因此,当他们添加一个约束时,他们有一个下拉菜单,他们可以选择多个类别,其中一个是名称 因此,如果他们输入: Name包含第一个约束的foo-bar

使用“”作为引用,我试图让我的程序(在检测到名称字段时)将名称的所有组合写入数据库(queryID aka qid不是主键。我希望所有组合都是重复的)

例子:约翰·迈克尔·多伊

  • 无名氏
  • 约翰·多伊·迈克尔
  • 迈克尔·约翰·多伊
  • 迈克尔·多伊·约翰
  • 约翰·迈克尔
  • 迈克尔·约翰
  • 为了让您更好地了解情况,当有人使用我的程序进行搜索时,他们可以添加“约束”

    因此,当他们添加一个约束时,他们有一个下拉菜单,他们可以选择多个类别,其中一个是名称

    因此,如果他们输入:
    Name包含第一个约束的foo-bar

    Id包含第二个约束的1234

    Name包含最后一个约束的john doe

    它将创建SQL语句:
    插入qal.query_输入值('df084b1f-1337','1234','','foo bar john doe','')
    (空格是未搜索的类别)

    现在我的问题是,我想要这个输出(使用相同的搜索):

    插入qal.query_输入值('df084b1f-1337','1234','','foo bar','')
    插入qal.query_输入值('df084b1f-1337','1234','','bar foo','')
    插入qal.query_输入值('df084b1f-1337','1234','','john doe','')
    插入qal.query_输入值('df084b1f-1337','1234','','doe john','')

    目前这是我的代码:

    ArrayList<String> fields = constraintToInputLogFieldMap.get(key);
    ArrayList<String> names;
    for (String field : fields) {
        ArrayList<String> values = inputLogFieldValues.get(field);
    
        if (values == null) {
            values = new ArrayList<>();
            inputLogFieldValues.put(field, values);
        }
    
        // only retrieve singletonRange and listRange          
        if (singletonRange != null) {
            values.add((String) singletonRange.getValue());
        }
        if (listRange != null) {
            for (Object v : listRange.getValues()) {
                values.add((String) v);
            }
        }
    }
    // This creates an arrayList for each name
    // ie. [foo bar, john doe]
    names = inputLogFieldValues.get("Name");
    
    for (String field : inputLogFields) {
        ArrayList<String> values = inputLogFieldValues.get(field);
        if (values == null)
            inputEntry += ",''";
        else {
            String valueStr = "";
            for (String value : values)
                valueStr += " " + value;
            inputEntry += ",'" + valueStr.substring(1) + "'";
        }
    }
    inputEntry = "insert into qal.query_input values('" + qid + "'" + inputEntry + ");";
    logger.info("Stackoverflow SQL output: " + inputEntry);
    dbUpdate(inputEntry);
    
    现在我要解决的唯一问题是生成名称排列的方法

    使用“”作为参考,我添加/更改了这个小部分

    ArrayList<String> inputEntries = new ArrayList<>();
    ArrayList<String> permutedNames = names; // <----
    for (String name : permutedNames) { // <--- Now permutedNames
        inputEntry = "";
        for (String field : inputLogFields) { ...
    
    ArrayList inpunteries=new ArrayList();
    ArrayList排列名称=名称;//使用Heap算法?
    
    ArrayList<String> inputEntries = new ArrayList<>();
    ArrayList<String> permutedNames = names; // <----
    for (String name : permutedNames) { // <--- Now permutedNames
        inputEntry = "";
        for (String field : inputLogFields) { ...
    
    private ArrayList<String> splitNames(ArrayList<String> listOfNames) {
        String temp = "";
        List<String> splitName;
        List<List<String>> listSplitName = new ArrayList<List<String>>();
        ArrayList<String> toReturn = new ArrayList<String>();
    
        if (listOfNames.size() == 1) {
            temp = listOfNames.get(0);
            splitName =  new ArrayList<String>(Arrays.asList(temp.split(" ")));
            listSplitName = generatePerm(splitName);
            for (int i = 0; i < listSplitName.size(); i++) {
                toReturn.add(listSplitName.get(i).toString());
            }
            return toReturn;
        }
        else {
            for (int i = 0; i < listOfNames.size(); i++) {
                temp = listOfNames.get(i);
                splitName = new ArrayList<String>(Arrays.asList(temp.split(" ")));
                listSplitName = generatePerm(splitName);
                for (int j = 0; j < listSplitName.size(); j++) {
                    toReturn.add(listSplitName.get(j).toString());
                }
            }
            return toReturn;
        }
    }
    
    private List<List<String>> generatePerm(List<String> original) {
        if (original.size() == 0) {
            List<List<String>> result = new ArrayList<List<String>>();
            result.add(new ArrayList<String>());
            return result;
        }
        String firstElement = original.remove(0);
        List<List<String>> returnValue = new ArrayList<List<String>>();
        List<List<String>> permutations = generatePerm(original);
        for (List<String> smallerPermutated : permutations) {
            for (int index=0; index <= smallerPermutated.size(); index++) {
                List<String> temp = new ArrayList<String>(smallerPermutated);
                temp.add(index, firstElement);
                returnValue.add(temp);
            }
        }
        return returnValue;
    }