在Java中使用单个for-each循环遍历多个列表

3
我有多个如下所示的列表:
static List<String> dbName = new ArrayList<String>();
    static List<String> dbServerName = new ArrayList<String>();
    static List<String> lDbName = new ArrayList<String>();
    static List<String> lServerName = new ArrayList<String>();
    static List<String> serverName = new ArrayList<String>();
    static List<String> dbServerNameSecondary = new ArrayList<String>();

是否可以使用单个for-each循环遍历所有列表对象,如下所示

for (items in dbName,dbServerName....)

我想并行迭代,并将以下查询中获得的值放入其中

String drop = "Drop table if exists "+hive_db+"."+"IB_C3_"+dbName+"_"+dbServerName;


如果它们具有相同的长度,您可以创建一个 for 循环,在其中增加索引编号,并在循环内获取每个元素。 - Jure
你期望得到什么?有效地连接字符串吗? - Jon Skeet
可能是在Java中连接多个迭代器的重复问题。 - Ferrybig
有没有什么理由不将DB对象表示为一个简单的类,其属性例如dbServerName,然后只有一个DB对象列表? - Abelgo
1个回答

3

是的,假设列表都是相同的长度,您可以通过使用标准的for循环同时迭代它们:

static List<String> dbName = new ArrayList<String>();
static List<String> dbServerName = new ArrayList<String>();
static List<String> lDbName = new ArrayList<String>();
static List<String> lServerName = new ArrayList<String>();
static List<String> serverName = new ArrayList<String>();
static List<String> dbServerNameSecondary = new ArrayList<String>();

// code filling lists here

for (int i = 0; i < dbName.size(); i++) {
    // dbName.get(i)
    // ...
    // dbServerNameSecondary.get(i)
}

然而,如果列表大小相同,则强烈建议使用Java的面向对象特性。这意味着为值创建一个类。

public class Database {
    private String dbName;
    private String dbServerName;
    private String lDbName;
    private String lServerName;
    private String serverName;
    private String dbServerNameSecondary;
    // getters and setters here
}

static List<Database> databases = new ArrayList<>();

// code filling list here

for (Database database : databases) {
    // database.getDbName()
    // ...
    // database.getDbServerNameSecondary()
}

我认为OP想要将值连接起来而不是并行迭代。但第二点肯定是有效的 - 在并行数组中存储“对象”是对象恐惧症的明确迹象... - Boris the Spider
@BoristheSpider 可能吧。问题在这一点上不太清楚。另一个答案展示了如何做到这一点,因此在这个和那个之间,应该已经满足了OP的需求。 - Andreas
@BoristheSpider 我想要进行并行迭代而不是连接。 - wandermonk
1
@dataEnthusiast,如果那些确实是并行数组,我强烈建议你采用此答案中的基于Object的解决方案。因为这完全不符合面向对象编程的思想。 - Boris the Spider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接