Could you help me because you do not remove it from the list?

0

My interface

public interface RepositoryProdutos {
    public void Listartodos(Produtos produtos);
    public void Salvar(Produtos produtos);
    public void remover(Produtos produtos);
}

Class that implements interface method

@Override       
public void remover(Produtos produtos) {
    System.out.println("Removendo .......");
    List<Produtos> produto = new ArrayList<Produtos>();
    produto.remove(produtos);   
}

Main class

public static void main(String[] args) {
    Produtos prod1 = new Produtos();
    Produtos prod2 = new Produtos(2, "veve");
    ProdutosImplementado pi = new ProdutosImplementado();
    ProdutosImplementado p2 = new ProdutosImplementado();

    prod1.setCodigo(1);
    prod1.setNome("teste");

    pi.Salvar(prod1);
    p2.Salvar(prod2);

    pi.Listartodos(prod1);
    p2.Listartodos(prod2);

    p2.remover(prod2);

    p2.Listartodos(prod2);
}

And here is the output in the terminal:

Salvando Produtos... de [codigo = 1, nome = teste]
Salvando Produtos... de [codigo = 2, nome = veve]
Listando Produtos... de [codigo = 1, nome = teste]
Listando Produtos... de [codigo = 2, nome = veve]
Removendo ......
Listando Produtos... de [codigo = 2, nome = veve]

Why did not the p2 object be removed?

    
asked by anonymous 26.10.2016 / 07:18

2 answers

0

Good morning, my friend.

Your algorithm is correct. However the compiler needs to know what a Products object differs from another Products object.

You need to override the equals method of the Products class. By default, every Java class extends the Object class.

Example:

If the name of an obj1 is equal to the name of an obj2, it characterizes equality between them.

This is exactly what you need to do:

Identify what makes the obj unique and implement logic in the equals method.

    
26.10.2016 / 10:46
0

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

    
26.10.2016 / 10:28