it-swarm-pt.tech

Como remover um objeto específico do ArrayList em Java?

Como posso remover um objeto específico da ArrayList? Suponha que eu tenha uma classe como abaixo:

import Java.util.ArrayList;    
public class ArrayTest {
    int i;

    public static void main(String args[]){
        ArrayList<ArrayTest> test=new ArrayList<ArrayTest>();
        ArrayTest obj;
        obj=new ArrayTest(1);
        test.add(obj);
        obj=new ArrayTest(2);
        test.add(obj);
        obj=new ArrayTest(3);
        test.add(obj);
    }
    public ArrayTest(int i){
        this.i=i;
    }
}

Como posso remover o objeto com new ArrayTest(1) do meu ArrayList<ArrayList>

15
sanu

ArrayList remove objetos com base no método equals(Object obj). Então você deve implementar corretamente este método. Algo como:

public boolean equals(Object obj) {
    if (obj == null) return false;
    if (obj == this) return true;
    if (!(obj instanceof ArrayTest)) return false;
    ArrayTest o = (ArrayTest) obj;
    return o.i == this.i;
}
24
AValchev

Em geral, um objeto pode ser removido de duas maneiras de um ArrayList (ou geralmente qualquer List ), por índice ( remove(int) ) e por objeto ( remove(Object) ).

Nesse cenário específico: Adicione um método equals(Object) à sua classe ArrayTest. Isso permitirá que ArrayList.remove(Object) identifique o objeto correto.

10
Bombe

Se você estiver usando o Java 8:

test.removeIf(t -> t.i == 1);

O Java 8 possui um método removeIf na interface de coleta. Para o ArrayList, ele possui uma implementação avançada (ordem de n).

3
tmh

Para remover o objeto particular de arrayList, existem duas maneiras. Chame a função de arrayList.

  1. Removendo com base no objeto.
arrayList.remove(object);

Isso removerá seu objeto, mas na maioria dos casos, quando arrayList contém os itens de DataTypes UserDefined, esse método não fornece o resultado correto. Ele funciona bem apenas para DataTypes primitivos. Porque o usuário deseja remover o item com base no valor do campo de objeto e que não pode ser comparado por remover a função automaticamente.

  1. Removendo com base na posição de índice especificada de arrayList. A melhor maneira de remover qualquer item ou objeto de arrayList. Primeiro, encontre o índice do item que você deseja remover. Em seguida, chame esse método arrayList, esse método remove o item na base do índice. E isso dará o resultado correto.
arrayList.remove(index);  
3
Aman Goyal

use este código

test.remove(test.indexOf(obj));

test is your ArrayList and obj is the Object, first you find the index of obj in ArrayList and then you remove it from the ArrayList.
1
Kashif Khan

AValchev está certo. Uma solução mais rápida seria analisar todos os elementos e comparar por uma propriedade única. 

String property = "property to delete";

for(int j = 0; j < i.size(); j++)
{
    Student obj = i.get(j);

    if(obj.getProperty().equals(property)){
       //found, delete.
        i.remove(j);
        break;
    }

}

Essa é uma solução rápida. É melhor implementar a comparação de objetos para projetos maiores.

1
victorash

Você pode usar Collections.binarySearch para encontrar o elemento e, em seguida, chamar remove no índice retornado.

Consulte a documentação do Collections.binarySearch aqui: http://docs.Oracle.com/javase/1.4.2/docs/api/Java/util/Collections.html#binarySearch%28Java.util. Lista,% 20Java.lang.Object% 29

Isso exigiria que o objeto ArrayTest tivesse .equals implementados. Você também precisaria chamar Collections.sort para classificar a lista. Finalmente, o ArrayTest teria que implementar a interface Comparable, para que binarySearch fosse executado corretamente.

Essa é a maneira "correta" de fazer isso em Java. Se você está apenas olhando para resolver o problema de uma maneira rápida e suja, então você pode apenas iterar sobre os elementos e remover aquele com o atributo que você está procurando.

0
Alan Delimon
List<Object> list = new ArrayList();
for (Iterator<Object> iterator = list.iterator(); iterator.hasNext();) {
  Object obj= iterator.next();
    if (obj.getId().equals("1")) {
       // Remove the current element from the iterator and the list.
       iterator.remove();
    }
}
0
Jules S.

Aqui está o exemplo completo. nós temos que usar método remove () do Iterator

import Java.util.ArrayList;
import Java.util.Iterator;

public class ArrayTest {
    int i;
    public static void main(String args[]) {
        ArrayList<ArrayTest> test = new ArrayList<ArrayTest>();
        ArrayTest obj;
        obj = new ArrayTest(1);
        test.add(obj);
        obj = new ArrayTest(2);
        test.add(obj);
        obj = new ArrayTest(3);
        test.add(obj);
        System.out.println("Before removing size is " + test.size() + " And Element are : " + test);
        Iterator<ArrayTest> itr = test.iterator();
        while (itr.hasNext()) {
            ArrayTest number = itr.next();
            if (number.i == 1) {
                itr.remove();
            }
        }
        System.out.println("After removing size is " + test.size() + " And Element are :" + test);
    }
    public ArrayTest(int i) {
        this.i = i;
    }
    @Override
    public String toString() {
        return "ArrayTest [i=" + i + "]";
    }

}

Working demo Screen

0
vipul gulhane

Se você deseja remover vários objetos correspondentes à propriedade, tente isto.

Eu usei o seguinte código para remover o elemento da matriz de objetos que me ajudou.

Em geral, um objeto pode ser removido de duas maneiras a partir de uma ArrayList (ou geralmente qualquer List), por index (remove (int)) e por object (remove (Object)).

algum tempo para você arrayList.remove(index)ou arrayList.remove(obj.get(index)) usando essas linhas pode não funcionar tente usar o seguinte código.

for (Iterator<DetailInbox> iter = detailInboxArray.iterator(); iter.hasNext(); ) {
    DetailInbox element = iter.next();
   if (element.isSelected()) {
      iter.remove();
   }
}
0
Sagar

Isso me ajudou:

        card temperaryCardFour = theDeck.get(theDeck.size() - 1);
        theDeck.remove(temperaryCardFour);    

ao invés de 

theDeck.remove(numberNeededRemoved);

Eu tenho uma conformação de remoção no primeiro trecho de código e uma conformação de remoção de un no segundo.

Tente trocar seu código com o primeiro snippet. Acho que esse é o seu problema.

Nathan Nelson

0
Nathan Nelson
    ArrayTest obj=new ArrayTest(1);
    test.add(obj);
    ArrayTest obj1=new ArrayTest(2);
    test.add(obj1);
    ArrayTest obj2=new ArrayTest(3);
    test.add(obj2);

    test.remove(object of ArrayTest);

você pode especificar como você controla cada objeto.

0
Pritom

Eu tentei isso e funciona para mim:

ArrayList<cartItem> cartItems= new ArrayList<>();

//filling the cartItems

cartItem ci=new cartItem(itemcode,itemQuantity);//the one I want to remove

Iterator<cartItem> itr =cartItems.iterator();
while (itr.hasNext()){
   cartItem ci_itr=itr.next();
   if (ci_itr.getClass() == ci.getClass()){
      itr.remove();
      return;
    }
}
0
user9402274