Java枚举和循环问题

标签 java enums for-loop

我有一个循环遍历的节点列表:

for (int i = 0; i < aNodes.getLength(); i++) {
  //
}

例如,假设列表包含 12 个项目,并且我知道 3 个项目代表表中的一行,接下来的 3 个项目属于下一行。这意味着我的 12 个节点列表源自包含 4 行的 HTML 表。

在每一行之后我想做一些事情,例如,创建一个新对象并填充它......或者其他什么。我有一个解决方案:

ArrayList<Account> mAccounts = new ArrayList<Account>();
Account account = new Account();

for (int i = 0; i < aNodes.getLength(); i++) {

            String nodeValue = aNodes.item(i).getNodeValue();
            boolean isNewRow = (i % COLS_PER_ROW == 0);

            if (isNewRow) {
                account = new Account();
                mAccounts.add(account);
            }

            switch (i % COLS_PER_ROW) {
            case ACCOUNT_POS:
                account.setAccount(nodeValue);
                break;
            case BALANCE_POS:
                account.setBalance(nodeValue);
                break;
            case DATE_POS:
                account.setDate(nodeValue);
                break;
            }
        }

但是这个解决方案有很多我不喜欢的地方:

  1. Account 实例第一次创建两次,一次在循环外创建,另一次是因为检测到新行而创建。
  2. 它使用整数常量 ACCOUNT_POS=0、BALANCE_POS=1、DATE_POS=2...这感觉不太好,我认为我应该使用枚举。
  3. 我无法将枚举与循环变量“i”一起使用。
  4. 我无法使用 for every 循环,因为 Nodes 没有实现正确的接口(interface),

任何人都可以建议一种更好的方法来解决我不喜欢的一系列问题吗?

谢谢。

最佳答案

您可以将 i 增加 COLS_PER_ROW 而不是 1,然后写入:

for (int i = 0; i < aNodes.getLength(); i += COLS_PER_ROW) {
    account = new Account();
    String account = aNodes.item(i).getNodeValue();
    account.setAccount(account);
    String balance = aNodes.item(i+1).getNodeValue();
    account.setBalance(balance);
    String date = aNodes.item(i+2).getNodeValue();
    account.setDate(date);
    mAccounts.add(account);
}

关于Java枚举和循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6745818/

相关文章:

Java,生成选定的枚举值列表

batch-file - 批量 if 语句问题

java - 如何将 Java 8 与 MS Access 连接?

java - Android:约束布局中的多个 fragment

java - 枚举:每个实例独有的方法

python - 如何让 Enum 的成员进入全局命名空间?

windows - 如何测量 for 循环每次迭代所需的时间?

java - for-each 不适用于表达式类型所需的数组或 java.lang.iterable

java - 如何将字符串分成两部分

java - 同步使用数据库插入