Do not remove from the list, simply because you did not implement the object's hashCode and Equals methods, or it was done wrong.
That way the list does not find the object to be removed.
Implement the hashCode and Equals methods in Products
Below a test tip, add a 3 product in the list and test.
List<Produtos> produto = new ArrayList<Produtos>();
int indice=produto.indexOf(seuProdutoTeste);
System.out.println(indice);
- It should print the correct index of your object, this is the test to ensure that your Products object hashCode and Equal methods is correct.
- Generally, no plural object name is used.
I've set an example there: see, 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 is well evolved