2017-06-30 17 views
1

これは、件名豆の私の実際のデータJavaを使用してArrayListの値を反復処理する方法は?

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

] 

私は、このように作成すると、1フィールド「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" 
}, 

を設定subbatサイズ]

に基づいて、このBeanを書き直したいです

しかし、私は両方この出力を得た - 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); 
    } 
} 

論理的に間違っています?

+1

「subjectDatas」の宣言を表示できますか? (命名ノート: "データ"は既に複数の名詞です。) –

答えて

0

テーマが複製できない場合は(深いクローン)作成してください。次に、内部ループで以下を使用できます。

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

私はcouldnt understannd –

0

問題はeachSubjectオブジェクトにあります。 あなたが気づいたら、inner forループは、SAME外部オブジェクトをサブジェクトリストに追加しています。内部ループの最初の反復で正しい値を設定しても、そのオブジェクトは後続の反復で変更されます...これは最終的には同じオブジェクトをn回追加し、すべての新しいサブジェクトリストのオブジェクトには最後のオーバーライドされた値が含まれます。 同じオブジェクトを繰り返し修正しないでください。重複を修正する必要があります。

+0

あなたはコードワイドで私を助けることができます –

関連する問題