Java web - duvida carrinho de compras

Tenho o seguinte exercicio: Implemente a classe Carrinho que implementa interface iCarrinho.Note que a classe Carrinho deve ter um construtor que cria uma instancia da classe Lista para elementos do tipo iItem, e que ao adicionar um novo item na Lista, você deve verificar se ele já não existe na lista. A propriedade que identifica de forma unica uma instancia de iItem é o seu Id.

Segue o que eu implementei

public interface iItem {
	public int getId();
	public void setId(int id);
	public String getDescricao();
	public void setDescricao(String desc);
}

import java.util.List;

public interface iCarrinho {
	public void adicionaItem (iItem item);
	public boolean removeItem (iItem item);
public List<iItem> getItens ();
}

import java.util.ArrayList;
import java.util.List;

import iCarrinho;
import.iItem;

public class Carrinho implements iCarrinho {

	public Carrinho() {
		List<iItem> itens = new ArrayList<iItem>();
	}


	public void adicionaItem(iItem item) {
	    
			if(!itens.contains(item)){
		        itens.add(item);
		        System.out.println("Item adicionado.");
		       
		    }else{
		    	 System.out.println("Esse item já foi adicionado ao carrinho anteriormente.");
		    }
		}

Eu não estou entendendo como relacionar o ID no método adiciona.

1 curtida

AMIGO, pesquise sobre o método equals e hashcode. Procure entender como ele se relaciona com coleções de dados :slight_smile:

Na sua classe que vai implementar iItem reescreve equals e hashcode como no exemplo abaixo:

package javaapplication1.classes;
public class Item implements IITem{

    private int id;
    private String descricao;
    
    @Override
    public int getId() {
        return id;
    }

    @Override
    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String getDescricao() {
        return descricao;
    }

    @Override
    public void setDescricao(String descricao) {
        this.descricao = descricao; 
    }
    
    @Override
    public boolean equals(Object object)
    {
        boolean sameSame = false;

        if (object != null && object instanceof Item)
        {
            sameSame = this.id == ((Item) object).id;
        }

        return sameSame;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 97 * hash + this.id;
        return hash;
    }
}

Link explicativo: http://tutorials.jenkov.com/java-collections/hashcode-equals.html