cami-la / collections-java-api-2023

Este repositório é referente ao curso "Collection Framework API Java" e é uma valiosa contribuição para a comunidade de desenvolvedores Java, fornecendo exemplos práticos e recursos educacionais relacionados à poderosa API de coleções da linguagem Java.
https://web.dio.me/course/conhecendo-collections-java/learning/c5d6f4e1-6d05-4eea-93d8-d292c708999f
1.05k stars 766 forks source link

Otimização no método obterProximoEvento da classe AgendaEventos #18

Open MarcosViniSil opened 1 year ago

MarcosViniSil commented 1 year ago

Código apresentado

public void obterProximoEvento() {
    /*Set<LocalDate> dateSet = eventosMap.keySet();
    Collection<Evento> values = eventosMap.values();*/
    //eventosMap.get();
    LocalDate dataAtual = LocalDate.now();
    LocalDate proximaData = null;
    Evento proximoEvento = null;
    Map<LocalDate, Evento> eventosTreeMap = new TreeMap<>(eventosMap);
    for (Map.Entry<LocalDate, Evento> entry : eventosTreeMap.entrySet()) {
      if (entry.getKey().isEqual(dataAtual) || entry.getKey().isAfter(dataAtual)) {
        proximaData = entry.getKey();
        proximoEvento = entry.getValue();
        System.out.println("O próximo evento: " + proximoEvento + " acontecerá na data " + proximaData);
        break;
      }
    }
  }

É um código funcional,que cumpre sua função declarada,obter um próximo evento dado uma data atual,como o código tem como objetivo imprimir apenas 1 vez o próximo evento podemos omitir a declaração das variáveis proximaData e proximoEvento pois já está claro que o método irá apresentar o próximo evento,que consequentemente possui uma data,segue abaixo uma sugestão de otimização:

    public void obterProximoEvento() {

    LocalDate dataAtual = LocalDate.now();

        Map<LocalDate, Evento> eventosTreeMap = new TreeMap<>(eventosMap);
    for(Entry<LocalDate,Evento> e : eventosTreeMap.entrySet()) {

        if(e.getKey().equals(dataAtual)||e.getKey().isAfter(dataAtual)) {
             System.out.println("O próximo evento: " + e.getValue() + " acontecerá na data " +e.getKey() ); 
                break;
            }
        }

    }

OBS:É apenas uma sugestão vindo de um estudante que gosta muito de programar

cami-la commented 1 year ago

Show, amigo! Muito bom!

Não sei se você percebeu, mas no comecinho quando eu estava resolvendo este método, eu fiz desse mesmo jetinho que você fez, sem criar as variáveis temporárias:

LocalDate dataAtual = LocalDate.now();
LocalDate proximaData = null;
Evento proximoEvento = null;

Porém para quem está começando a entender sobre POO e até Collections, achei interessante deixar o mais claro possivel. Assim, para os alunos entenderem o que significa o entry.getKey() e o entry.value();

De qualquer forma está muito bom! Parabéns pelo progresso! (: