JavaFX - Sistema de Login - Não Consigo Verificar Se o Nome de Usuário Está no ArrayList

Pesssoal, estou desenvolvendo um programa de Atendimento ao Cliente (apenas para praticar) e cheguei num ponto que preciso verificar se o nome de usuário existe no “banco de dados” que, nesse caso, é no próprio ArrayList.
Eu registro as informações do cliente e quando tento inserir no login ele dá como falso. Algumas partes do código estão assim:

MÉTODO LOGIN:

public void carregarLogin(){
        String mensagemBot = txtBotRecente.getText();
        String mensagemUsuario = txtMensagem.getText();
        
        txtUsuarioRecente.setText(mensagemUsuario);
        txtBotAntiga.setText(mensagemBot);
        txtMensagem.clear();
        
        boolean nomeOK = listaDeClientes.contains(mensagemUsuario);
        
        if(nomeOK == true){
            System.out.println("TESTE: VERDADEIRO");
        }else{
            System.out.println("TESTE: FALSO");
        }
        
        if("cancelar".equalsIgnoreCase(mensagemUsuario)){
            txtMensagem.clear();
            alertaCancelado();
            carregarMensagemInicial();
        }
    }

MÉTODO DE REGISTRO DO CLIENTE:

public void cadastrarCliente(){
        Clientes novoCliente = new Clientes(nome, email, senha);
        listaDeClientes.add(novoCliente);
    }

CLASSE CLIENTES:

public class Clientes {
    private String nome;
    private String email;
    private String senha;

    public Clientes(String nome, String email, String senha) {
        this.nome = nome;
        this.email = email;
        this.senha = senha;
    }
    
    public String getNome() {
        return nome;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    @Override
    public String toString() {
        return nome + " : " + email + " : " + senha;
    }
    
}

Espero que alguém consiga me dizer o que fazer para verificar se o nome de usuário é valido. Obs: o código, obviamente, não está completo. Qualquer coisa que alguém precise posso mandar aqui.

A listaDeClientes é um List<Clientes>, da forma como vc fez não vai funcionar mesmo:

boolean nomeOK = listaDeClientes.contains(mensagemUsuario);

Pois vc está tentando procurar usando tipos incompatíveis (mensagemUsuario é uma String).

Crie um método que receba essa String, que faça a busca o array e devolva o boolean:

public boolean verificarSeUsuarioExiste(String nome) {
  for (Clientes cliente : listaDeClientes) {
    if (cliente.getNome().equals(nome)) {
      return true;
    }
  }

  return false;
}

E, usando esse método:

boolean nomeOK = verificarSeUsuarioExiste(mensagemUsuario);

Algumas observações:

  • Em vez da classe chamar Clientes, mude apenas para Cliente (no singular), pois a ideia da classe é representar um único cliente. Quando for vários clientes, será uma lista de clientes, ou seja, um List<Cliente> clientes.

  • Para facilitar, e melhorar, o uso do “banco de dados” na forma de ArrayList, talvez vc possa pensar em ter uma classe chamada Database, por exemplo, ou ClienteRepositorio, para manter esse ArrayList, com isso, vc poderia ter métodos úteis nessa classe para pesquisar os clientes da lista:

public class ClienteRepositorio {
  private static final List<Cliente> CLIENTES = new ArrayList<>();

  public void salvar(Cliente cliente) {
    // aqui vc pode até verificar se o cliente já existe e lançar uma exceção
    CLIENTES.add(cliente);
  }

  public List<Cliente> recuperarTodos() {
    return new ArrayList<>(CLIENTES);
  }

  public Cliente recuperarPorNome(String nome) {
    for (Clientes cliente : CLIENTES) {
      if (cliente.getNome().equals(nome)) {
        return cliente;
      }
    }
    
    return null;
  }
}
1 curtida

Explicação excelente. Muito obrigado pela ajuda! Me salvou!