Dúvida com ArraList Java

Olá, tudo certo?

Estou fazendo um software para praticar que vai gerar pessoas (de uma classe pessoa), com dados aleatórios, tais como: Nome, Apelido, Rg, telefone, cpf, etc…

Estou tentando fazer com que os apelidos das pessoas não sejam iguais.

Então eu tenho uma classe BancoPessoas, onde tem um arraylist do tipo Pessoa, onde vai todas as pessoas geradas.

Gostaria de saber como fazer referencia a um atributo da classe Pessoa em outra classe para poder fazer minha validação e comparar o Apelido com outros e ver se são iguais.

Estou criando um método onde um FOR vai percorrer todo arraylist de Pessoas, mas não sei como comparar se os apelidos são iguais.

Ola Tom, eu tambem estou aprendendo JAVA, vc ja tentou usar o if (apelido == apelido){ system.out.print(" pfv insira outro apelido! ");

1 curtida

Então, a questão é que “apelido” é um atributo de Pessoa, e estou usando uma Lista de Pessoas. É por aí mas preciso saber como fazer a referencia ao apelido de uma pessoa especifica da minha lista.

Sem ver seu código eu não consigo de orientar direito, mas, em geral, na sua classe Pessoa vc teria um método chamado getApelido() que vc usaria dentro do seu for. Seria algo assim:

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

class Pessoa {
  private String apelido;

  Pessoa(String apelido) {
    this.apelido = apelido;
  }

  String getApelido() {
    return this.apelido;
  }
}

public class Main {
  public static void main(String... args) {
    List<Pessoa> pessoas = new ArrayList<>();

    String apelido = "abc";

    for (Pessoa pessoa : pessoas) {
      if (pessoa.getApelido().equals(apelido)) {
        // Uma pessoa com o apelido foi encontrada
      }
    }
  }
}

Ou usando streams:

public static void main(String... args) {
  List<Pessoa> pessoas = new ArrayList<>();

  String apelido = "abc";

  if (pessoas.stream().anyMatch(pessoa -> pessoa.getApelido().equals(apelido))) {
    // Uma pessoa com o apelido foi encontrada
  }
}

Se quiser, mostra seu código, pois assim podemos pensar numa solução mais adequando ao seu problema especifico.

1 curtida

Vou mostrar meu código resumido:

public class Pessoa {
    private String nome;
    private String apelido;
    private String cpf;
    private int idade;
    private String rg;
    private String telefone;


    public Pessoa() {
        this.nome = geraNome();
        this.apelido = geraApelido(nome);
        this.cpf = geraCpf();
        this.idade = geraIdade();
        this.rg = geraRG();
        this.telefone = geraTelefone();

        public String getApelido() {
        return apelido;
        }

        public String geraApelido(String nome) {

        String apelido = nome.substring(0, 3);
        
        return apelido;
        }


    }
import java.util.ArrayList;

public class BancoPessoas {
    ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>();


    public BancoPessoas(ArrayList<Pessoa> pessoas) {
        this.pessoas = pessoas;
    }
        

    public ArrayList<Pessoa> getPessoas() {
        return pessoas;
    }


    public static void mostraPessoas(ArrayList<Pessoa> pessoas){
        for (int i = 0; i < pessoas.size(); i++) {
            System.out.println(pessoas.get(i));
        }
    }

    public void validaApelido(){
            for (Pessoa pessoa : pessoas) {
                if(pessoas.getApelido().equals(apelido)){
                    //problema aqui...
                    //"The method getApelido() is undefined for the type ArrayList<Pessoa>"
                }
            }
    }

}

Teria que ser “pessoa.getApelido()” ao invés de “pessoas.getApelido()” e vc teria que declarar a variável apelido em algum lugar.

Acho que entendi melhor sua situação e gostaria de fazer uma sugestão. Ao invés de ter o método “validaApelido”, vc poderia ter um outro método que informa se já existe uma pessoa com o apelido desejado, assim vc conseguiria saber se um apelido é repetido, olha um exemplo.

import java.util.ArrayList;

class Pessoa {
  private String apelido;

  Pessoa(String apelido) {
    this.apelido = apelido;
  }

  String getApelido() {
    return this.apelido;
  }
}

class BancoPessoas {
  ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>();

  public void adicionarPessoa(Pessoa pessoa) {
    this.pessoas.add(pessoa);
  }

  public boolean existePessoaComApelido(String apelido) {
    for (Pessoa pessoa : pessoas) {
      if (pessoa.getApelido().equals(apelido)) {
        return true;
      }
    }

    return false;
  }
}

public class Main {
  public static void main(String... args) {
    BancoPessoas bancoPessoas = new BancoPessoas();

    bancoPessoas.adicionarPessoa(new Pessoa("Pedro"));

    if (bancoPessoas.existePessoaComApelido("Pedro")) {
      System.out.println("Pedro já existe.");
    } else {
      System.out.println("Não existe Pedro no banco.");
    }
  }
}
1 curtida