java - 如何使用 Java 迭代 ArrayList 值?

标签 java arraylist collections

这是我在主题 bean 中的实际数据

[
    {
        "subbat": [
            {
                "batn": "A1",
            },
            {
                "batn": "A2",
            }
        ],
        "id": "588edaf7adbe1d00013ff125"
    }

]

我想根据我想创建的子 bat 大小重写这个bean,并设置一个字段“batn”

{
    "subbat": [
        {
            "batn": "A1",
        },
        {
            "batn": "A2",
        }
    ],
    "batn": "A1",                 -------//trying to set batn
    "id": "588edaf7adbe1d00013ff125"
},
{
    "subbat": [
        {
            "batn": "A1",
        },
        {
            "batn": "A2",
        }
    ],
    "batn": "A2",             -------//trying to set batn
    "id": "588edaf7adbe1d00013ff125"
},

]

但是我得到了这个输出 -- batn = A2

{
    "subbat": [
        {
            "batn": "A1",
        },
        {
            "batn": "A2",
        }
    ],
    "batn": "A2",------------------------------->I got A2 here why?
    "id": "588edaf7adbe1d00013ff125"
},
{
    "subbat": [
        {
            "batn": "A1",
        },
        {
            "batn": "A2",
        }
    ],
    "batn": "A2",
    "id": "588edaf7adbe1d00013ff125"
},

]

这是我尝试此代码中的错误的代码

List<Subject> subjects = new ArrayList<Subject>();
for (Subject eachSubject : subjectDatas) {
    if (eachSubject.getSubbat() != null && !eachSubject.getSubbat().isEmpty()) {
    for (Batch eachBatch : eachSubject.getSubbat()) {
        if (eachBatch.getBatn() != null) {
        eachSubject.setBatn(eachBatch.getBatn());
        subjects.add(eachSubject);
        }

    }
    } else {
    subjects.add(eachSubject);
    }
}

我也使用了迭代器方式,但得到了相同的输出,这在逻辑上是不正确的

List<Subject> subjects = new ArrayList<Subject>();
ListIterator<Subject> iter = subjectDatas.listIterator();
while (iter.hasNext()) {
    Subject eachSubject = iter.next();
    if (eachSubject.getSubbat() != null && !eachSubject.getSubbat().isEmpty()) {
    ListIterator<Batch> iter1 = eachSubject.getSubbat().listIterator();
    while (iter1.hasNext()) {
        Batch eachBatch = iter1.next();
        eachSubject.setBatn(eachBatch.getBatn());
        subjects.add(eachSubject);
    }
    } else {
    subjects.add(eachSubject);
    }
}

我的代码发生了什么变化?

最佳答案

如果您的主题不可克隆(深度克隆),则将其设置为可克隆。然后您可以在内部循环中使用以下内容。

Subject newSubject = eachSubject.clone();
Batch eachBatch = iter1.next();
newSubject.setBatn(eachBatch.getBatn());
subjects.add(newSubject);

关于java - 如何使用 Java 迭代 ArrayList 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44851526/

相关文章:

java - 来自客户端或服务器的时间戳 - 最佳实践是什么?

java - 在 Java 中从 ArrayList 中删除对象

php - Laravel:对具有多对多关系的集合进行排序

java - 如何在Java中使用键名及其值存储数据?

java - Collections.sort 没有对任何东西进行排序

java - @FormParameter在ContainerRequestContext实体流中读取并设置相同数据后数据变为null

java - "Requested array size exceeds VM limit"位于 java.io.PrintWriter.newLine

java - 没有蓝图 xml 的 Karaf 中的 RESTful 服务

java - 我如何处理带计数的 ArrayList,并按函数分组

Java:HashMap<String,String> 存储与键和值相同的值。