2014-09-24 93 views
0

我的问题是我有一个函数接收一些ArrayList的,我想循环遍历它们,但我不知道它们会有多少,它可以是任何数量的ArrayList的。循环遍历Java中不同大小的几个列表

此外,ArrayList有不同的大小,它们的大小也可以是任何东西。

我找不到有类似问题的人,我发现所有人都已经知道ArrayList的数量或ArrayList的大小。

只是为了说明这一点,我将展示一种可能的情况:

class A{ 
     public ArrayList<String> chars = new ArrayList<>(); 
    } 

    class C{ 
     public ArrayList<A> A_objects = new ArrayList<>(); 
     public void print(){ 
      // Print all combinations of chars from the A_objects 
     } 
    } 

    A a1 = new A(); 
    A a2 = new A(); 

    a1.chars.add("x"); 
    a1.chars.add("y"); 

    a2.chars.add("X"); 
    a2.chars.add("Y"); 
    a2.chars.add("Z"); 

    C c1 = new C(); 
    c1.A_objects.add(a1); 
    c1.A_objects.add(a2); 
    c1.print(); 

我想要的是一种方法,通过ArrayList的,让所有的组合是由循环。该功能将打印,例如:

xX xY xZ yX yY yZ 

注意打印功能不知道“A_objects”的大小,无论是“字符”的ArrayList的大小,但它必须通过他们循环反正。

有没有办法做到这一点?

谢谢大家的阅读,我很抱歉如果我做错了什么,这只是我的第二个问题。

回答

0

我想你需要有某种合并方法。

为了提高可读性,我将删除A和C类以仅使用列表。

List<String> merge(List<String> first, List<String> second) { 
    if(first.isEmpty()) {return second;} 
    if(second.isEmpty()) {return first;} 
    List<String> result = new ArrayList<>(); 
    for(String prefix : first) { 
     for(String suffix : second) { 
      result.add(prefix + suffix); 
     } 
    } 
    return result; 
} 

,现在有一个打印方法:

public void print() { 
    List<String> all = new ArrayList<>(); 
    for(A element : A_objects) { 
     all = merge(all, element.chars) 
    } 
    // now you just have to print 

} 

这是未经测试,但应该做的工作。

0

你会想要两个嵌套循环。第一个依次获取每个A,第二个获取给定A的字符串列表中的每个字符串。对于每个循环而言,两者的大小都不成问题。

public void print(){ 
    for(A a : A_objects){ 
     for(String s : a.chars){ 
      System.out.print(s); 
     } 
     System.out.print(" "); 
    } 
} 
+0

感谢您的回答,但我认为这不完全是我需要的,我认为这会打印'x y X Y Z'。 – luislhl 2014-09-24 15:57:47

+0

由于没有任何空格,它会打印'xyXYZ'。如果你想要元素的空格,只需在第一个for循环之后添加一个print(“”)。我现在将它添加 – Mshnik 2014-09-24 15:59:28

+0

但我希望函数能够在A_objects的字符之间进行所有组合,所以在本例中它会打印出'xX xY xZ yX yY yZ'。 – luislhl 2014-09-24 16:04:03

0

循环遍历第一个数组列表,然后循环遍历第二个数列列表的数组列表循环的每个元素。

例子:

for(A singlelist : arraylistoflists) 
{ 
    for(String element : singlelist.getYourArrayList()) 
    { 
     //processing here 
    } 
} 

这只是你将不得不修改使用你的类的实例。