Comparação Enum

Estou tentando comparar um enum para adicionar somente se o ENUM estiver como “L”, porém não consigo fazer essa comparação, já tentei de N formas e nenhuma entra no IF, segue oq eu tentei agora.

LinkedList<Mecanico> retorno = new LinkedList<>();
for (Mecanico mecanico : listaMecanicos) {
    if (mecanico.getSituacao().L.equals(Situacao.L)) {
        retorno.add(mecanico);
    }
}
return retorno;

Enum:

O("Ocupado"), L("Disponível");

private String descricao;

private Situacao(String descricao) {
    this.descricao = descricao;
}

Quando vc compara enums, pode comparar diretamente com ==, ficaria assim:

import java.util.LinkedList;
import java.util.List;

public class Main {
  public static void main(String... args) {
    enum Situacao {
      O("Ocupado"), L("Disponível");

      private String descricao;

      private Situacao(String descricao) {
        this.descricao = descricao;
      }
    }

    class Mecanico {
      private String nome;
      private Situacao situacao;

      Mecanico(String nome, Situacao situacao) {
        this.nome = nome;
        this.situacao = situacao;
      }

      Situacao getSituacao() {
        return this.situacao;
      }

      @Override
      public String toString() {
        return this.nome;
      }
    }

    List<Mecanico> listaMecanicos = new LinkedList<>();
    listaMecanicos.add(new Mecanico("João", Situacao.O));
    listaMecanicos.add(new Mecanico("Pedro", Situacao.L));
    listaMecanicos.add(new Mecanico("José", Situacao.O));
    listaMecanicos.add(new Mecanico("Marcos", Situacao.L));

    LinkedList<Mecanico> retorno = new LinkedList<>();
    for (Mecanico mecanico : listaMecanicos) {
      if (mecanico.getSituacao() == Situacao.L) {
        retorno.add(mecanico);
      }
    }
    System.out.println(retorno);
  }
}
2 curtidas

getSituacao() retorna um dos valores do enum (que pode ser O ou L), então esse .L está errado, basta retirá-lo (ficaria if (mecanico.getSituacao().equals(Situacao.L))).

Mas como já foi dito acima, enums podem ser comparados com == (com equals também funcionará, já que o método equals de um enum internamente usa o operador ==).

1 curtida

Sim, eu já tentei com getSituacao.equals(Situacao.L) ou com o == mas mesmo assim ele não cai dentro do IF.

É algo na comparação, pois já tentei passando direto com return, e ela retorna de boa o que eu digitei no Dialog.

Tem como vc mostrar a classe Mecanico?

public class Mecanico extends Pessoa{
    private Situacao situacao;

    public Mecanico(){
        super();
        this.setSituacao(situacao.L);
    }
    
    public Mecanico(String nome, String cpf, Situacao situacao){
        super(nome, cpf);
        this.setSituacao(situacao);
    }
    
    public Situacao getSituacao() {
        return situacao;
    }

    public void setSituacao(Situacao situacao) {
        this.situacao = situacao;
    }

    @Override
    public String toString() {
        return super.getNome();
    }

Parece tudo certo. E aquela listaMecanicos, será que ela foi preenchida corretamente?

Creio que sim, pois se não tivesse certo não retornaria nem se eu colocasse o return direto, porém retorna.

private static LinkedList<Mecanico> listaMecanicos = new LinkedList<>();

Assim é feita a alimentação no dialog:

Mecanico mecanico = new Mecanico(jTFNome.getText(), jFTFCPF.getText(), jRBDisp.isSelected() ? Situacao.L : Situacao.O);
Dados.getListaMecanicos().add(mecanico);

getListaMecanicos é onde está a condição

Eu só consigo pensar que o problema está em outro lugar.

Se vc fez como eu e o Hugo dissemos, então, então a condição deveria funcionar.

Acho que seria bom ir rodando o programa colocando ums println ou uns breakpoints para acompanhar a execução.

É o jeito, pois olhando por cima não tem nada errado.

Acho que descobri, depois de ficar um tempo analisando vi que tem algo suspeito. Vou corrigir e mando um feedback

Maravilha. Quero saber o fim deste mistério.