Could you help me because you won’t remove it from the list?

Asked

Viewed 61 times

0

My interface

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

Class implementing 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’s the exit at 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 the object p2 was not removed?

  • If I put pi.remover(prod1) also does not remove, which is wrong in this code??

  • 1

    People are kicking answers because the question is not clear. Ask a [mcve] to help people give answers that serve to help.

  • 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 (method salvar). PS: By convention methods in Java start with lowercase letter.

  • Anthony Accioly how to do this?

2 answers

0

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

  • I have implemented in the class products, both for the code attribute, as name, it is worth mentioning that this example only for educational purposes does not persist.

  • No matter if it needs to persist or is not required by the List interface, it needs to be correct for this to work, if hasCode of the object is found and it equals was correct it will remove,

  • I have set an example, now you will have no doubt.

0

Good morning, my friend.

Your algorithm is correct. However the compiler needs to know what differs a Products object 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.

That’s exactly what you’ll need to do:

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

Browser other questions tagged

You are not signed in. Login or sign up in order to post.