这是我在主题 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/