Подтвердить что ты не робот

Как удалить элемент из ArrayList, проверив его значение?

У меня есть ArrayList, из которого я хочу удалить элемент, который имеет особое значение...

например.

ArrayList<String> a=new ArrayList<String>();
a.add("abcd");
a.add("acbd");
a.add("dbca");

Я знаю, что мы можем перебирать метод arraylist и .remove() для удаления элемента, но я не знаю, как это сделать, итерации. Как удалить элемент, который имеет значение "acbd", то есть второй элемент?

4b9b3361

Ответ 1

В вашем случае нет необходимости перебирать список, потому что вы знаете, какой объект удалить. У вас есть несколько вариантов. Сначала вы можете удалить объект по индексу (поэтому, если вы знаете, что объект является вторым элементом списка):

 a.remove(1);       // indexes are zero-based

Затем вы можете удалить первое появление вашей строки:

 a.remove("acbd");  // removes the first String object that is equal to the
                    // String represented by this literal

Или удалите все строки с определенным значением:

 while(a.remove("acbd")) {}

Это немного сложнее, если у вас есть более сложные объекты в вашей коллекции и вы хотите удалить экземпляры, которые имеют определенное свойство. Чтобы вы не смогли удалить их, используя remove с объектом, который совпадает с тем, который вы хотите удалить.

В этом случае я обычно использую второй список для сбора всех экземпляров, которые я хочу удалить, и удалить их во втором проходе:

 List<MyBean> deleteCandidates = new ArrayList<>();
 List<MyBean> myBeans = getThemFromSomewhere();

 // Pass 1 - collect delete candidates
 for (MyBean myBean : myBeans) {
    if (shallBeDeleted(myBean)) {
       deleteCandidates.add(myBean);
    }
 }

 // Pass 2 - delete
 for (MyBean deleteCandidate : deleteCandidates) {
    myBeans.remove(deleteCandidate);
 }

Ответ 2

Вам понадобится Iterator:

Iterator<String> iterator = a.iterator();
while(iterator.hasNext())
{
    String value = iterator.next();
    if ("abcd".equals(value))
    {
        iterator.remove();
        break;
    }
}

При этом вы можете использовать remove (int index) или remove (Object obj) которые предоставляются классом ArrayList. Обратите внимание, однако, что вызов этих методов во время итерации по циклу вызовет ConcurrentModificationException, поэтому это не сработает:

for(String str : a)
{
    if (str.equals("acbd")
    {
        a.remove("abcd");
        break;
    }
}

Но это будет (поскольку вы не повторяете содержимое цикла):

a.remove("acbd");

Если у вас есть более сложные объекты, вам нужно переопределить метод equals.

Ответ 3

Однострочный (java8):

list.removeIf(s -> s.equals("acbd")); // removes all instances, not just the 1st one

(все итерации неявно)

Ответ 4

Вы должны проверить API для этих вопросов.

Вы можете использовать удалить методы.

a.remove(1);

ИЛИ

a.remove("acbd");

Ответ 5

Просто используйте myList.remove(myObject).

Он использует метод equals класса. См. http://docs.oracle.com/javase/6/docs/api/java/util/List.html#remove(java.lang.Object)

Кстати, если у вас есть более сложные вещи, вы должны проверить библиотеку guava, в которой есть десятка утилиты, чтобы сделать это с помощью предикатов и т.д.

Ответ 6

использовать метод contains(), который доступен в интерфейсе списка, чтобы проверить значение в списке или нет. Если он содержит этот элемент, получите его индекс и удалите его

Ответ 7

Используйте итератор для прокрутки списка, а затем удалите требуемый объект.

    Iterator itr = a.iterator();
    while(itr.hasNext()){
        if(itr.next().equals("acbd"))
            itr.remove();
    }

Ответ 8

Фрагмент для удаления элемента из любого arraylist на основе условия соответствия выглядит следующим образом:

List<String> nameList = new ArrayList<>();
        nameList.add("Arafath");
        nameList.add("Anjani");
        nameList.add("Rakesh");

Iterator<String> myItr = nameList.iterator();

    while (myItr.hasNext()) {
        String name = myItr.next();
        System.out.println("Next name is: " + name);
        if (name.equalsIgnoreCase("rakesh")) {
            myItr.remove();
        }
    }

Ответ 9

Попробуйте ввести код:

 public static void main(String[] args) throws Exception{
     List<String> l = new ArrayList<String>();
     l.add("abc");
     l.add("xyz");
     l.add("test");
     l.add("test123");
     System.out.println(l);
     List<String> dl = new ArrayList<String>();
    for (int i = 0; i < l.size(); i++) {
         String a = l.get(i);
         System.out.println(a); 
         if(a.equals("test")){
             dl.add(a);
         }
    }
    l.removeAll(dl);
     System.out.println(l); 
}

ваш вывод:

 [abc, xyz, test, test123]
abc
xyz
test
test123
[abc, xyz, test123]

Ответ 10

Это даст вам выход,

    ArrayList<String> l= new ArrayList<String>();

    String[] str={"16","b","c","d","e","16","f","g","16","b"};
    ArrayList<String> tempList= new ArrayList<String>();

    for(String s:str){
        l.add(s);
    }

    ArrayList<String> duplicates= new ArrayList<String>();

    for (String dupWord : l) {
        if (!tempList.contains(dupWord)) {
            tempList.add(dupWord);
        }else{
            duplicates.add(dupWord);
        }
    }

    for(String check : duplicates){
        if(tempList.contains(check)){
            tempList.remove(check);
        }
    }

    System.out.println(tempList);

выход,

[c, d, e, f, g]