Do not remove from the list simply because you have not implemented the object’s hashcode and Equals methods, or are done wrong.
This way the list does not find the object to be removed.
Implement hashcode and Equals methods in Products
Below a test tip, add a 3 product on the list and test.
List<Produtos> produto = new ArrayList<Produtos>();
int indice=produto.indexOf(seuProdutoTeste);
System.out.println(indice);
- It must print the correct index of your object, this is the test to ensure that your hashcode and Equal methods of the object Products be correct.
- Usually no object names are used in the plural.
I put together an example: look, test, draw your conclusions
package com;
public interface IProduto
{
}
package com;
public class Produto implements IProduto
{
private Long id;
public Produto(Long id)
{
this.id=id;
}
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
{
return true;
}
Produto other = (Produto) obj;
if (obj == null || getClass() != obj.getClass() || (id == null && other.id != null) || !id.equals(other.id))
{
return false;
}
return true;
}
}
package com;
public class Milho extends Produto
{
private String nome;
public Milho(Long id, String nome)
{
super(id);
this.nome = nome;
}
public String getNome()
{
return nome;
}
public void setNome(String nome)
{
this.nome = nome;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((nome == null) ? 0 : nome.hashCode());
return result;
}
@Override
public boolean equals(Object obj)
{
boolean result = false;
if (this == obj)
{
result = true;
}
if (obj instanceof Milho)
{
Milho other = (Milho) obj;
if (!(!super.equals(obj) || getClass() != obj.getClass() || (nome == null && other.nome != null)
|| !nome.equals(other.nome)))
{
result = true;
}
}
return result;
}
}
import java.util.ArrayList;
import java.util.List;
public class TesteRemoveList
{
public static void main(String[] args)
{
TesteRemoveList test = new TesteRemoveList();
test.testRemoveIProduto();
test.testRemoveProduto();
test.testRemoveMilho();
}
public void testRemoveMilho()
{
System.out.println("--------------------");
final List<Milho> produtos = new ArrayList<Milho>();
produtos.add(new Milho(2L, "Amarelo"));
produtos.add(new Milho(3L, "Verde"));
produtos.add(new Milho(4L, "Cozido"));
System.out.println(produtos.size());
//vamos remover o 2
produtos.remove(new Produto(2L));
System.out.println(produtos.size());
produtos.remove(new Produto(2L));
System.out.println(produtos.size());
//não acha
produtos.remove(new Milho(2L, "Verde"));
System.out.println(produtos.size());
//acha
produtos.remove(new Milho(2L, "Amarelo"));
System.out.println(produtos.size());
//não acha mais
produtos.remove(new Milho(2L, "Amarelo"));
System.out.println(produtos.size());
System.out.println("--------------------");
}
public void testRemoveIProduto()
{
System.out.println("--------------------");
final List<IProduto> produtos = new ArrayList<IProduto>();
produtos.add((IProduto) new Produto(1L));
produtos.add((IProduto) new Produto(2L));
produtos.add((IProduto) new Milho(2L, "Amarelo"));
produtos.add((IProduto) new Milho(3L, "Verde"));
produtos.add((IProduto) new Milho(4L, "Cozido"));
System.out.println(produtos.size());
//vamos remover o 2
produtos.remove(new Produto(2L));
System.out.println(produtos.size());
produtos.remove(new Produto(2L));
System.out.println(produtos.size());
//não acha
produtos.remove(new Milho(2L, "Verde"));
System.out.println(produtos.size());
//acha
produtos.remove(new Milho(2L, "Amarelo"));
System.out.println(produtos.size());
//não acha mais
produtos.remove(new Milho(2L, "Amarelo"));
System.out.println(produtos.size());
System.out.println("--------------------");
}
public void testRemoveProduto()
{
System.out.println("--------------------");
final List<Produto> produtos = new ArrayList<Produto>();
produtos.add(new Produto(1L));
produtos.add(new Produto(1L));
produtos.add(new Produto(1L));
produtos.add(new Produto(2L));
produtos.add(new Produto(3L));
produtos.add(new Produto(4L));
System.out.println(produtos.size());
//encontrou um removeu
produtos.remove(new Produto(1L));
System.out.println(produtos.size());
produtos.remove(new Produto(1L));
System.out.println(produtos.size());
produtos.remove(new Produto(1L));
System.out.println(produtos.size());
produtos.remove(new Produto(1L));
System.out.println(produtos.size());
System.out.println("--------------------");
}
}
Just copy the code and adjust the package and test, it’s well evolved
If I put pi.remover(prod1) also does not remove, which is wrong in this code??
– Everson Souza de Araujo
People are kicking answers because the question is not clear. Ask a [mcve] to help people give answers that serve to help.
– Maniero
His method
remover
is initiating an empty list and trying to remove the element from it (this code does nothing in practice). You must remove the element from the same list in which Voce persisted it (methodsalvar
). PS: By convention methods in Java start with lowercase letter.– Anthony Accioly
Anthony Accioly how to do this?
– Everson Souza de Araujo