【问题标题】:Iterating through multiple lists using single for-each loop in java在java中使用单个for-each循环遍历多个列表
【发布时间】:2016-02-15 14:48:24
【问题描述】:

我创建了多个列表,如下所示

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(dbName,dbServerName....中的项目)

我想并行迭代并将获得的值放在下面的查询中

String drop = "如果存在则删除表 "+hive_db+"."+"IB_C3_"+dbName+"_"+dbServerName;

【问题讨论】:

  • 如果它们的长度相同,则可以进行 for 循环,在其中增加索引号并在循环内部获取每个元素。
  • 您希望得到什么?有效地串联?
  • 是否有理由不将 DB 对象表示为具有 dbServerName 等属性的简单类,然后拥有一个 DB 对象列表

标签: java foreach iterator java-7


【解决方案1】:

是的,假设列表的大小都相同,您可以使用标准的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 希望将值串联起来,而不是并行迭代。但第二点当然是正确的——将Object 存储在并行数组中是对象恐惧症的明确标志......
  • @BoristheSpider 也许吧。关于这一点的问题尚不清楚。另一个答案显示了如何做到这一点,所以在这个和那个之间,应该涵盖 OP 的需求。
  • @BoristheSpider 我想做并行迭代而不是串联
  • @dataEnthusiast 我会强烈建议您在这种情况下在此答案中使用基于Object 的解决方案。如果这些确实是并行数组,那么那完全是非面向对象的。
猜你喜欢
  • 2022-01-06
  • 2023-03-06
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 2013-10-15
  • 2013-10-15
  • 2019-09-07
  • 1970-01-01
相关资源
最近更新 更多