我想知道一个程序有Arraylists的组合。情景如下。 可以说下面有3种不同的Arraylists。
前:
前:
就我而言,arraylists的数量是动态的。一个arraylist的大小也是动态的。在这样的场景中,我想知道使用Java实现的方法。 任何人都可以建议我使用Java的方法吗?
谢谢
答案 0 :(得分:4)
您可以将所有列表放入totalList,其类型为List>。一次合并2个列表以填充所有组合案例。
以下是供您参考的例子,它会根据您的需要打印信息。
注意: 它支持列表的动态数量和列表的动态大小。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> listOne = Arrays.asList("Silver", "White", "Grey",
"Purple");
List<String> listTwo = Arrays.asList("Petrol", "Hybrid");
List<String> listThree = Arrays.asList("Toyota", "Micro");
List<List<String>> totalList = Arrays.asList(listOne,listTwo,listThree);
new Test().printAllCases(totalList);
}
public void printAllCases(List<List<String>> totalList)
{
List<String> result = new ArrayList<String>(totalList.get(0));
for(int index = 1; index < totalList.size() ; index++)
{
result = combineTwoLists(result, totalList.get(index));
}
/* print */
int count = 0;
for(String s: result)
{
System.out.printf("%d. %s\n", ++count, s);
}
}
private List<String> combineTwoLists(List<String> list1, List<String> list2)
{
List<String> result = new ArrayList<String>();
StringBuilder sb = new StringBuilder();
for(String s1 : list1)
{
for(String s2: list2)
{
sb.setLength(0);
sb.append(s1).append(' ').append(s2);
result.add(sb.toString());
}
}
return result;
}
}
答案 1 :(得分:1)
如果您不反对外部库,guava-libraries提供了一个非常好的Sets.cartesianProduct
方法,可以做到这一点。当然,你最终会将你的名单转换成......
Set<String> colors = ImmutableSet.of("Silver", "White", "Grey", "Purple");
Set<String> fuelTypes = ImmutableSet.of("Petrol", "Hybrid");
Set<String> brands = ImmutableSet.of("Toyota", "Micro");
Set<List<String>> result = Sets.cartesianProduct(colors, fuelTypes, brands);
System.out.println(result);
答案 2 :(得分:0)
好好想想这个伪代码:
for (i for size of array1) {
for (j for size of array2) {
for (k for size of array3) {
print array1[i] + array2[j] + array3[k]
}
}
}
在Java中是这样的:
int i, j, k;
int count = 0;
for (i = 0; array1.size(); i++) {
for (j = 0; array2.size(); j++) {
for (k = 0; array3.size(); k++) {
count++;
System.out.println(count + ". " +array1.get(i) + array2.get(j) + array3.get(k));
}
}
}