JavaList

Olá.
Eu estou treinando a Collections em java, fiz uma lista de nome e cpf de pessoas e gostaria de saber como fazer comparação e não deixar acrescentar no array mais de um cpf igual.

Código:

package pessoas;

public class pessoa {

public String nome;
public String cpf;

public pessoa(String cpf, String nome) {
	this.cpf = cpf;
	this.nome = nome;
}

public Object getNome() {
	return this.nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public String getCpf() {
	return cpf;
}

public void setCpf(String cpf) {
	this.cpf = cpf;
}

}

Código 2: package pessoas;

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

public class FilaDePessoas {

private List<pessoa> fila;

public FilaDePessoas() {
	fila = new ArrayList<>();
}

public List<pessoa> getFila() {
	return Collections.unmodifiableList(fila);
}

public void adicionarNaFila(pessoa pessoa) {
	fila.add(pessoa);

}

public static void main(String[] args) {

	FilaDePessoas fila = new FilaDePessoas();

	fila.adicionarNaFila(new pessoa("000.000.000-00", "Robson"));
	fila.adicionarNaFila(new pessoa("020.000.000-00", "Doctor"));
	fila.adicionarNaFila(new pessoa("000.000.000-00", "Who"));

	for (int i = 0; i < fila.getFila().size(); i++) {
		System.out.println(String.format("%s - %s", i, fila.getFila()
				.get(i).getNome()));
	}

}

}

Tem duas alterações que você pode fazer.

  1. Usar um Set e não uma List, pois o Set garante unicidade das informações.

    Set<Pessoa> pessoas = new HashSet<Pessoa>();

  2. Adicionar o Equals e o hashCode na sua classe “Pessoa”. Estes métodos são utilizados internamente ao Set para valida a unicidade.

     class Pessoa{
         ...
         public boolean equals(Object anObject) {
             return cpf.equals(((Pessoa)anObject).getCpf() );
         }
         public int hashCode() {
             return cpf.hashCode();
         }
     }
    

Aí sim você pode realizar a comparação simples:

if(pessoa.equals(compare)) {
    System.out.println(pessoa.getNome());
}

Ou ele pode continuar usando lista, só implementar os métodos equals e hashcode e, antes de inserir, verificar com o método contains

 if(!pessoas.contains(pessoa)) {
    //Faz algo aqui
 }