2017-05-31 2 views
0

attributeListを空にするには、値をlargeAttributeListに「追加」する必要があります。私は.clear()を試みましたが、largeAttributeListはすべての値を失います。あなたは、その清算前にリストのコピーを作成する必要がループ中のarraylistを空にする

ArrayList<String> attributeList = new ArrayList<String>(); 
ArrayList<ArrayList<String>> largeAttributeList = new 
ArrayList<ArrayList<String>>(); 

for (int i = 0; i < attribute.getLength(); i++) { 
     String current = attribute.item(i).getTextContent(); 
     if(current.equals("Identifier")){ 
      largeAttributeList.add(attributeList); 
     } 
     else{ 
      attributeList.add(current); 
     } 
    } 
+0

あなたの入力と期待される出力の例は? –

答えて

7

あなたのループの中、あなたの配列をinisializeことができます。

.... 
ArrayList<String> attributeList; 
for (int i = 0; i < attribute.getLength(); i++) { 
    String current = attribute.item(i).getTextContent(); 
    if (current.equals("Identifier")) { 
     largeAttributeList.add(attributeList); 
     attributeList = new ArrayList<>();//<<<------------- 
    } else { 
     attributeList.add(current); 
    } 

} 
+0

これはforの各ラウンドで初期化されます。彼は追加時にそれを単に空にしたいのですが、私はあなたの提案を 'if(current.equals(" Identifier ")){'そうすれば、それを追加した後は常に新しいものになるでしょうね。 – Nico

2

largeAttributeList.add(new ArrayList<>(attributeList)); 

更新:YCF_Lソリューションは明らかにオーバーヘッド取得し、ための追加作業を与える必要がない私の原因の一つよりも優れていますGC。

1

をあなたはlargeAttributeListattributeListを追加するときattributeListための新しいArrayListオブジェクトを作成します。

largeAttributeList.add(new ArrayList<String>(attributeList)); 

をこの方法では、あなたが明確attributeList.clear()を実行したときattributeListのみで、リストオブジェクトはlargeAttributeListに追加されていません。

2

あなたが行うと:あなたがたAttributeListのコピーを作成することが、largeAttributeListへの参照を追加していない

largeAttributeList.add(attributeList); 

。ループの中でattributeListを再初期化するのが最善の解決策だと思います:

List<List<String>> identifierAttributes = new ArrayList<List<String>>(); 
List<String> attributes = new ArrayList<String>(); 
for (int i = 0; i < attribute.getLength(); i++) {   
    String current = attribute.item(i).getTextContent(); 
    if(current.equals("Identifier")){ 
     identifierAttributes.add(attributes); 
     attributes = new ArrayList<String>(); 
    } 
    else { 
     attributes.add(current); 
    } 
} 
関連する問題