2011-11-17 19 views
6

基本的に、ユーザーは、IteratorがArrayListを検索するStringを送信します。見つかった場合、IteratorはStringを含むオブジェクトを削除します。Java、Iteratorを使用してArrayListを検索し、一致するオブジェクトを削除する

これらのオブジェクトにはそれぞれ2つの文字列が含まれているため、これらの行を1つの文字列として書くことに問題があります。

Friend current = it.next(); 
String currently = current.getFriendCaption(); 

ありがとうございました!

+3

私は質問があまり意味がないのではないかと心配しています。なぜあなたはそれらの行を1つに書く必要がありますか? –

+1

それは私を助けるだおかげで... ^^ –

答えて

34

あなたはちょうどそれが一致したときにアイテムを削除するにはremoveを使用して、1行にそれらを必要としません。

Iterator<Friend> it = list.iterator(); 
while (it.hasNext()) { 
    if (it.next().getFriendCaption().equals(targetCaption)) { 
     it.remove(); 
     // If you know it's unique, you could `break;` here 
    } 
} 

全デモ:

import java.util.*; 

public class ListExample { 
    public static final void main(String[] args) { 
     List<Friend> list = new ArrayList<Friend>(5); 
     String   targetCaption = "match"; 

     list.add(new Friend("match")); 
     list.add(new Friend("non-match")); 
     list.add(new Friend("match")); 
     list.add(new Friend("non-match")); 
     list.add(new Friend("match")); 

     System.out.println("Before:"); 
     for (Friend f : list) { 
      System.out.println(f.getFriendCaption()); 
     } 

     Iterator<Friend> it = list.iterator(); 
     while (it.hasNext()) { 
      if (it.next().getFriendCaption().equals(targetCaption)) { 
       it.remove(); 
       // If you know it's unique, you could `break;` here 
      } 
     } 

     System.out.println(); 
     System.out.println("After:"); 
     for (Friend f : list) { 
      System.out.println(f.getFriendCaption()); 
     } 

     System.exit(0); 
    } 

    private static class Friend { 
     private String friendCaption; 

     public Friend(String fc) { 
      this.friendCaption = fc; 
     } 

     public String getFriendCaption() { 
      return this.friendCaption; 
     } 

    } 
} 

出力:

$ java ListExample 
Before: 
match 
non-match 
match 
non-match 
match 

After: 
non-match 
non-match
+0

私は非常にあなたの答えと感謝を理解し、問題はその私が を入力すると、 '場合である(it.next()。(テキスト)を含んで){' それはdoesnの仕事は? ArrayList内の各オブジェクトの特定の部分(文字列キャプション)のみを検索する必要があります。 – Nayrdesign

+0

@Nayrdesign: 'Iterator'を正しく宣言していることと、正しく返すものを扱っていることを確認してください。例えば、あなたの例では、 'it(string))'が 'Iterator'のように動作して文字列を反復していますが、' ArrayList'に 'Friend'オブジェクトが含まれているように見えます文字列ではありません。完全なデモは、正しく行う方法を示しています。キービットは 'Iterator 'を宣言しています。 'Iterator'が' Friend'インスタンスを反復しているので、 'it.next()'が 'Friend'になるように' if(it.next()。 getFriendCaption()。contains(text)){'。 –

+0

@TJCrowder私は自分のプログラムを正確にモデル化しましたが、私は次のようになっています:スレッド "main"の例外java.util.NoSuchElementException \t at java.util.AbstractList $ Itr.next(AbstractList.java:350) \t at RandomInt (RandomInt.java:74) \t RandomInt.main(RandomInt.java:85) – hologram

関連する問題