我有一个方法,您可以在其中指定参数列表(test1,test2 ...)以及具有属于先前参数的有效值的列表列表。如果我想遵循给定参数的特定顺序,我如何迭代所有值?
String test1 = "parameter1";
String test2 = "parameter2";
String test3 = "parameter3";
List<String> validValuesforTest1 = Arrays.asList(new String[] { "test1", "test11" });
List<String> validValuesforTest2 = Arrays.asList(new String[] { "test2" });
List<String> validValuesforTest3 = Arrays.asList(new String[] { "test3", "test33", "test33" });
预期行为:
for (String x : validValuesforTest1) {
for (String y : validValuesforTest2) {
for (String z : validValuesforTest3) {
return String.format("%s = %s, %s = %s, %s = %s", test1, x, test2, y, test3, z);
}
}
}
我不知道给出了多少参数。
答案 0 :(得分:0)
使用递归实现这是很自然的。 编写一个获取有效值列表的方法, 另一个参数列表和一个前缀字符串。 第一个和第二个列表必须具有相同的长度。
当第一个列表为空时,递归应该终止, 并打印前缀的值。
否则(列表不为空), 迭代第一个子列表的元素, 准备递归调用的前缀, 然后使用两个列表的尾部(没有head元素)执行递归调用。
这样的事情:
private void combine(List<List<String>> lists, List<String> params, StringBuilder prefix) {
if (lists.isEmpty()) {
System.out.println(prefix);
return;
}
for (String value : lists.get(0)) {
StringBuilder copy = new StringBuilder(prefix);
if (copy.length() > 0) {
copy.append(", ");
}
copy.append(params.get(0)).append(" = ").append(value);
combine(lists.subList(1, lists.size()), params.subList(1, params.size()), copy);
}
}
使用您的示例输入,您可以这样调用它:
public void demo() {
String test1 = "parameter1";
String test2 = "parameter2";
String test3 = "parameter3";
List<String> validValuesforTest1 = Arrays.asList(new String[] { "test1", "test11" });
List<String> validValuesforTest2 = Arrays.asList(new String[] { "test2" });
List<String> validValuesforTest3 = Arrays.asList(new String[] { "test3", "test33", "test33" });
combine(
Arrays.asList(validValuesforTest1, validValuesforTest2, validValuesforTest3),
Arrays.asList(test1, test2, test3),
new StringBuilder());
}
获得输出:
parameter1 = test1, parameter2 = test2, parameter3 = test3 parameter1 = test1, parameter2 = test2, parameter3 = test33 parameter1 = test1, parameter2 = test2, parameter3 = test33 parameter1 = test11, parameter2 = test2, parameter3 = test3 parameter1 = test11, parameter2 = test2, parameter3 = test33 parameter1 = test11, parameter2 = test2, parameter3 = test33
答案 1 :(得分:0)
您可以创建一个方法,该方法将数组列表作为参数,并使用多个字符串,如下所示:
public static String method(List<List<String>> values, String... parameters) {
StringBuilder sb = new StringBuilder();
if(values.size() != parameters.length) return null;
for(int i = 0; i < parameters.length; i++) {
sb.append(parameters[i] + "=");
sb.append(values.get(i));
}
return sb.toString();
}