我已经定义了一些已经填充的 ArrayList。我在数组“tagArrays”中拥有要迭代的所有名称。是否有可能以与我类似的逻辑迭代它们中的每一个。我知道这段代码不会工作,但我不确定代码应该是什么样子。这是我的尝试:
这些已经填充并在 main 方法中定义。
ArrayList<String> KEYWORDS = new ArrayList<String>();
ArrayList<String> CUSTOMERS = new ArrayList<String>();
ArrayList<String> SYSTEM_DEPS = new ArrayList<String>();
ArrayList<String> MODULES = new ArrayList<String>();
ArrayList<String> DRIVE_DEFS = new ArrayList<String>();
ArrayList<String> PROCESS_IDS = new ArrayList<String>();
这是我正在使用的逻辑
public void genericForEachLoop(POITextExtractor te) {
final String[] tagArrays = {"KEYWORDS", "CUSTOMERS", "SYSTEM_DEPS", "MODULES", "DRIVE_DEFS", "PROCESS_IDS"};
ArrayList<String> al = new ArrayList<String>();
for(int i=0; i<tagArrays.length; i++) {
System.out.println(tagArrays[i]);
al = tagArrays[i];
for (String item : al) {
if (te.getText().contains(item)) {
System.out.println(item);
}
}
}
}
我希望 foreach 循环每次都不同,例如一旦浏览关键字,然后浏览客户等。
最佳答案
在 Java 中不能引用带有字符串值的变量。
您尝试做的事情可以通过反射来执行。
但我不鼓励它:它的可读性较差,更脆弱/更容易出错,并且与“经典”方式相比速度较慢。
作为替代方案,您可以提供 varargs
的List<String>
作为该方法的最后一个参数:
public void genericForEachLoop(POITextExtractor te, String[] tagArrays, List<String>... lists ) {
int i = 0;
for(List<String> list : lists) {
System.out.println(tagArrays[i]);
for (String item : list) {
if (te.getText().contains(item)) {
System.out.println(item);
}
}
i++;
}
}
并以这种方式调用它:
genericForEachLoop(te,
new String[]{"KEYWORDS", "CUSTOMERS", "SYSTEM_DEPS", "MODULES", "DRIVE_DEFS", "PROCESS_IDS"},
KEYWORDS, CUSTOMERS,SYSTEM_DEPS,MODULES,DRIVE_DEFS,PROCESS_IDS);
关于java - 使用方法迭代多个预定义的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48498946/