2017-12-27 70 views
-1

Arraylistから要素のコレクションを削除する際に問題があります。 .remove()はこの状況では機能しません。他のArrayListにあるArrayListから要素を削除します。

私は、以下の要素のコレクションで追加した情報を含むuncategorizedListというarrayListを持っています。

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)); 

次のステップは、String []型の収入を取ると、uncategorizedListがString []収入の単語のいずれかが含まれているかどうかを確認することです。そうであれば、私はincomeListに日付、説明、および価格を追加します。コードは完全に機能します。

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())); 


        } 
       } 
      } 

私が問題を抱えているのは、incomeListに追加された要素をuncategorizedListから削除する方法です。前に述べたように、.remove()は機能しません。 uncategorizedListに残すべき唯一のことは、あなたは、あなたがこのような位置になるだろうonLongClicksを使用して削除する場合は、パラメータなど

ような位置にlistName.remove(xx)
パスのような何かをしなければならない03/02/2017, bob, 20.50

+0

あなたは – johnII

+0

[ループを削除するときにConcurrentModificationExceptionを避ける] [Collectionを反復する]の重複の可能性があります(https://stackoverflow.com/questions/223918/iterating-through-a-collection-avoiding-concurrentmodificationexception-when-re ) – VPK

+0

@VPKイテレータを追加しましたが、それでも私がしたいものを削除していません..編集済みの投稿を確認してください – Stephan

答えて

0

実際、Iteratorの使用方法は間違っています。 ExpenseListのリストを持つuncategorizedListのイテレータを使用している場合、iterate.next()ExpenseListで、Stringではなくなります。それはあなたのために働くのであれば、次のコードを試してみてください。

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

これは動作します!!!あなたは素晴らしいです...私はjava.util.NoSuchElementExceptionエラーが発生しましたが、それを修正するためにはExpenseList =費用がかかります。ループの最初の内部に配置してください... – Stephan

+0

私はそれがうれしいです。ハッピーコーディング!! – VPK

0

です
listName.get(position) 
listName.remove(position) 
0

はあなたがここで少しトリックを行うことができますfollowing-

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); 
    } 

か、uncategorilizedListからオブジェクトをコピーすることができようにループのあなたの順序を変更することにより、 incomeListとへのremoveAllincomeList uncategorilizedListから。

 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); 

それはあなたの問題を解決ホープ:)

0

使用するには(含まれている)StringクラスのメソッドとリストのがremoveAll()メソッドは、コードのインタフェースは次のように書くことができます。

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); 
関連する問題