动态创建循环以迭代List <String>的列表

Sub*_*aha 2 java recursion loops for-loop list

我有一个ListList<String>的这是我从一个外部API方法调用得到:

List<List<String>> outerList
Run Code Online (Sandbox Code Playgroud)

我必须通过按照它们在外部列表中的相同顺序连接每个列表中的字符串来创建唯一的键组合.

示例:如果外部列表有2个内部列表,例如list1:{"A","B"}和list2:{"C","D"}.然后可能的唯一组合将是AC,AD,BC和BD.

但问题是outerList大小是动态的,它可以包含任意数量的内部列表.如果内部列表编号是固定的,那么我可以编写循环并创建组合.

我正在考虑使用反射,递归等方向,但到目前为止还没有能够解决它.

public static void main(String[] args) {

    List<List<String>> outerList = new ArrayList<List<String>>();
    List<String> list1 = new ArrayList<String>();
    list1.add("A");
    list1.add("B");
    List<String> list2 = new ArrayList<String>();

    list2.add("C");
    list2.add("D");
    outerList.add(list1);

    outerList.add(list2);

    for(String s1: list1) {
        for(String s2: list2) {
            System.out.println(s1+s2);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这里outerList有2个内部列表,所以我创建了2个for循环显式迭代和连接.但实时outerList可以有任意数量的内部列表,如何循环遍历所有内部循环并连接?

Mas*_*sim 5

这段代码适合我:

public class Test
{  

    public static void generate(LinkedList<LinkedList<String>> outerList, String outPut) {
        LinkedList<String> list = outerList.get(0);

        for(String str : list) {
            LinkedList<LinkedList<String>> newOuter = new LinkedList<LinkedList<String>>(outerList);
            newOuter.remove(list);

            if(outerList.size() > 1) {
                generate(newOuter, outPut+str);
             } else {
               System.out.println(outPut+str);
             }
        }
    }

    public static void main(String[] args) 
    {
        LinkedList<LinkedList<String>> outerList = new LinkedList<LinkedList<String>>();

        LinkedList<String> list1 = new LinkedList<String>();
        LinkedList<String> list2 = new LinkedList<String>();

        list1.add("A");
        list1.add("B");

        list2.add("C");
        list2.add("D");

        outerList.add(list1);
        outerList.add(list2);

        Test.generate(outerList, "");
    }      
}
Run Code Online (Sandbox Code Playgroud)

输出:

AC
AD
BC
BD