Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Retirar duplicados de um array de bojetos Java

Pessoal boa tarde, tenho um problema aqui e não estou conseguindo solucionar algo que acho que é simples.

Tenho uma lista de objeto Pessoa, exemplo:

1, fabio, 29

2, lais, 30

3, joao, 18

4, fabio, 29

eu quero que remover o fabio id: 4, ou 1, não me importa qual deles remova desde que remova um deles.

Não consegui usar o Set< Pessoa> p = new HashSet<>(); pois eles não são exatamente identicos pelo fato do id ser diferente, então eu preciso de alguma coisa que valide se dentro da list tem duplicado por nome, idade.

2 respostas
solução!

Boa tarde Fabio.

Uma das formas de resolver é utilizando o Set que você comentou e sobreescrevendo o método equals e hashcode do objeto Pessoa.

    @Override
    public boolean equals(Object o) {
        Pessoa comparing = (Pessoa) o;
        if(Integer.compare(this.getAge(), comparing.getAge()) == 0
            && this.getName().contentEquals(comparing.getName())) {
            return true;
        }
        return false;
    }

    //O ideal é sobreescrever para considerar os pontos de comparação.
    @Override
    public int hashCode() {
          return 0;
    }
        List<Pessoa> pessoas = new ArrayList<>();

        pessoas.add(new Pessoa(1, "fabio", 29));
        pessoas.add(new Pessoa(1, "fabio", 29));
        pessoas.add(new Pessoa(1, "joao", 29));

        Set<Pessoa> filtrados = new HashSet<>();
        filtrados.addAll(pessoas);

        filtrados.forEach(pessoa -> System.out.println(pessoa.getName()));

Nuu, deu super certo Fernanda.

Muito obrigado.