To trabalhando com uma list aqui e antes de incluir um objeto na list eu faco o teste para saber se o objeto ja esta contido na lista. Se ja estiver eu nao deixo incluir. O teste eh o seguinte: if(!list.contains(obj)) ... inclui na lista.
Eu tenho testado a inclusão de varios objetos iguais, mas este teste nao esta funcionando. alguem sabe por que?
import java.util.*;
/** Esta classe não redefine equals */
class Cliente {
private String nome;
public Cliente (String nome) { this.nome = nome; }
}
/** Esta classe redefine equals */
class Empresa {
private String nome;
public Empresa (String nome) { this.nome = nome; }
public boolean equals (Object obj) {
if (obj == null) return false;
if (obj.getClass() != this.getClass()) return false;
return this.nome.equalsIgnoreCase (nome);
}
}
class ExemploEquals {
public static void main(String[] args) {
ExemploEquals e = new ExemploEquals();
e.teste1();
e.teste2();
}
// Teste com a classe Cliente, que não redefine equals
public void teste1 () {
List<Cliente> clientes = new ArrayList<Cliente>();
clientes.add (new Cliente ("João"));
clientes.add (new Cliente ("Maria"));
if (clientes.contains (new Cliente ("Maria"))) {
System.out.println ("Achei 'Maria' na lista de clientes");
} else {
System.out.println ("Não achei 'Maria' na lista de clientes");
}
}
// Teste com a classe Empresa, que redefine equals
public void teste2 () {
List<Empresa> empresas = new ArrayList<Empresa>();
empresas.add (new Empresa ("Sun"));
empresas.add (new Empresa ("Microsoft"));
if (empresas.contains (new Empresa ("Sun"))) {
System.out.println ("Achei 'Sun' na lista de empresas");
} else {
System.out.println ("Não achei 'Sun' na lista de empresas");
}
}
}
To trabalhando com uma list aqui e antes de incluir um objeto na list eu faco o teste para saber se o objeto ja esta contido na lista. Se ja estiver eu nao deixo incluir. O teste eh o seguinte: if(!list.contains(obj)) ... inclui na lista.
Eu tenho testado a inclusão de varios objetos iguais, mas este teste nao esta funcionando. alguem sabe por que?
[/quote]
concerteza o problema está na incorreta implementaçao de equals, mas um outro problema no seu codigo é fazer esse if antes. Se vc não quer ter itens repetidos use um Set e não um List. E não me diga que usa List para fazer get(index)…
Acho que estou com o mesmo problema :oops: :oops: :oops: :oops: :oops: :oops:
import java.util.*;
public class Lista
{
List<Cliente> clientes = new ArrayList<Cliente>();
public Lista()
{
}
public void adiciona(Cliente novoCliente)
{
if (clientes.contains(novoCliente))
System.out.println("Nao foi possivel inserir o cliente (ja existe)");
else
clientes.add(novoCliente);
}
public static void main(String[] args)
{
String nome;
do {
Lista lista = new Lista();
Scanner s = new Scanner(System.in);
System.out.print("Digite o nome do novo cliente: ");
nome = s.next();
if (nome.equals("lista")) {
for (Cliente c: clientes)
System.out.println("" + c.toString());
}
else {
Cliente c = new Cliente(nome);
lista.adiciona(c);
}
} while (!nome.equals(""));
}
}
Eu quero fazer a mesma coisa que você (depois de ler seu tópico quis ver isso)…
Só que, não entendi o porquê de eu ter que implementar um .equals se já existe um contains…
O código não compila por causa do for each, mas não sei o porquê.
Abraços…
Ps.: minha identação está legal ou deve ser melhorada?