2017-12-27 47 views
-1

Ich habe Probleme beim Löschen einer Sammlung von Elementen aus einem Arraylist. .remove() funktioniert in dieser Situation nicht.Entfernen Sie Elemente aus ArrayList, die in einer anderen ArrayList sind

Ich habe die folgende ArrayList namens uncategorizedList, die einige Informationen enthält, die ich mit der folgenden Sammlung von Elementen hinzugefügt.

List<ExpenseList> uncategorizedList = new ArrayList<>(); 
uncategorizedList.add(new ExpenseList("11/30/2017", "check deposit", 230.32)); 
uncategorizedList.add(new ExpenseList("09/12/2017", "cash deposit", 340.75)); 
uncategorizedList.add(new ExpenseList("08/01/2017", "edeposit", 30.01)); 
uncategorizedList.add(new ExpenseList("05/18/2017", "stephan", 1220.89)); 
uncategorizedList.add(new ExpenseList("03/02/2017", "bob", 20.50)); 

ist der nächste Schritt String [] Einkommen zu nehmen und sehen, ob uncategorizedList eines der Wörter in String [] Einkommen enthält. Wenn dies der Fall ist, füge ich der Einkommensliste das Datum, die Beschreibung und den Preis hinzu. Der Code funktioniert perfekt.

String[] income = {"edeposit", "stephan", "check deposit", "cash deposit"}; 
List<ExpenseList> incomeList = new ArrayList<>(); 

for (ExpenseList expense : uncategorizedList) { 
    for(int i=0; i < income.length; i++) { 
     if (expense.getDescription().toLowerCase().contains(income[i])) { 
      incomeList.add(new ExpenseList(expense.getDate(),expense.getDescription(), expense.getPrice())); 


        } 
       } 
      } 

Was ich ein Problem mit mit ist, wie die Elemente von uncategorizedList zu löschen, die incomeList hinzugefügt wurden. Wie bereits erwähnt, funktioniert .remove() nicht. Das einzige, was in uncategorizedList gelassen werden sollte, ist 03/02/2017, bob, 20.50

+0

Sie Möglicherweise benötigt Iterator für diese – johnII

+0

Mögliches Duplikat von [Iterieren durch eine Sammlung, vermeiden ConcurrentModificationException beim Entfernen in Schleife] (https://stackoverflow.com/questions/223918/iterating-through-a-collection-avoiding-concurrentmodificationexception-when-re) – VPK

+0

@VPK Ich habe den Iterator hinzugefügt und er entfernt immer noch nicht, was ich will .. überprüfe den bearbeiteten Beitrag – Stephan

Antwort

0

Eigentlich ist die Art, wie Sie den Iterator verwendet haben, falsch. Wenn Sie Iterator unter uncategorizedList verwenden, enthält die Liste der ExpenseList, iterate.next() Ihnen ExpenseList und nicht String. Also versuchen Sie folgenden Code, wenn es für Sie arbeitet:

for (Iterator<ExpenseList> iterate = uncategorizedList.iterator(); iterate.hasNext();) { 
    for(int i=0; i < income.length; i++) { 
     ExpenseList expense = iterate.next(); 
     if (expense.getDescription().toLowerCase().contains(income[i])) { 
      incomeList.add(new ExpenseList(expense.getDate(),expense.getDescription(), expense.getPrice())); 
      // Remove the current element from the iterator and the list. 
      iterate.remove(); 
     } 
    } 
} 
+0

Das funktioniert !!! Du bist großartig ... zuerst habe ich einen java.util.NoSuchElementException-Fehler bekommen, aber alles, was ich tun musste, um das zu beheben, ist ExpenseList kosten = iterate.next(); und platziere es innerhalb der ersten for-Schleife ... – Stephan

+0

Ich bin froh, dass es getan hat. Glückliche Kodierung !! – VPK

0

Sie haben so etwas wie listName.remove(xx)
Pass in der Position als Parameter zB tun

Wenn Sie mit onLongClicks Sie entfernen Position wie diese bekommen würde,

0

Sie können, indem Sie Ihre Sequenz von Schleife einen kleinen Trick hier tun wie die folgenden-

String[] income = {"edeposit", "stephan", "check deposit", "cash deposit"}; 
    List<ExpenseList> incomeList = new ArrayList<>(); 
    for (int i = 0; i < income.length; i++) { 
     ExpenseList expenseList = new ExpenseList("", "", 0); 
     for (ExpenseList expense : uncategorizedList) { 
      if (expense.getDescription().toLowerCase().contains(income[i])) { 
       incomeList.add(new ExpenseList(expense.getDate(),expense.getDescription(), expense.getPrice())); 
       expenseList = expense; 
      } 
     } 
     uncategorizedList.remove(expenseList); 
    } 

oder Sie Objekt aus uncategorilizedList kopieren konnte zu incomingList und removeAllincomeList von uncategorizedList.

 for (ExpenseList expense : uncategorizedList) { 
     for (int i = 0; i < income.length; i++) { 
      if (expense.getDescription().toLowerCase().contains(income[i])) { 
       incomeList.add(expense); 
      } 
     } 
    } 

    uncategorizedList.removeAll(incomeList); 

Hoffe, dass es Ihre Probleme löst :)

0

Durch die Verwendung enthält() -Methode der String-Klasse und removeAll() -Methode der Liste Schnittstelle kann der Code wie folgt geschrieben werden:

String income = "edeposit stephan check deposit cash deposit"; 
List<ExpenseList> incomeList = new ArrayList<>(); 

for (ExpenseList expense : uncategorizedList) { 
    if (income.contains(expense.getDescription().toLowerCase())) { 
     incomeList.add(expense); 
    } 
} 

uncategorizedList.removeAll(incomeList); 
Verwandte Themen