web-dev-qa-db-ja.com

Java、Iteratorを使用してArrayListを検索し、一致するオブジェクトを削除します

基本的に、ユーザーはIteratorがArrayListを検索する文字列を送信します。見つかった場合、イテレータは文字列を含むオブジェクトを削除します。

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

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

助けてくれてありがとう!

7
Nayrdesign

1行でそれらを必要とせず、removeを使用して、一致するアイテムを削除します。

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
38
T.J. Crowder