Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Usando Java 8 na Aula 1

Durante a aula, foi dado este código:

class Avaliador {

    private double maiorDeTodos = Double.NEGATIVE_INFINITY;
    private double menorDeTodos = Double.POSITIVE_INFINITY;

    public void avalia(Leilao leilao) {
        for(Lance lance : leilao.getLances()) {
            if(lance.getValor() > maiorDeTodos) maiorDeTodos = lance.getValor();
            else if(lance.getValor() < menorDeTodos) menorDeTodos = lance.getValor();
        }
    }

    public double getMaiorLance() {
        return maiorDeTodos;
    }

    public double getMenorLance() {
        return menorDeTodos;
    }
}

Contudo, tentei fazer aplicando alguns conceitos aprendidos no curso de Java 8, e ficou assim:

public class Avaliador {

    private double maiorDeTodos = Double.NEGATIVE_INFINITY; //menor numero que cabe em um Double
    private double menorDeTodos = Double.POSITIVE_INFINITY; //maior numero que cabe em um Double

    public void avalia(Leilao leilao) {
        maiorDeTodos = Collections.max(leilao.getLances(), Comparator.comparing(Lance::getValor)).getValor();
        menorDeTodos = Collections.min(leilao.getLances(), Comparator.comparing(Lance::getValor)).getValor();
    }

    public double getMaiorLance() {
        return maiorDeTodos;
    }

    public double getMenorLance() {
        return menorDeTodos;
    }
}

Porém, no primeiro código mostrado pelo professor no vídeo, temos o erro quando queremos pegar o menor. Na minha versão usando o Java 8, esse erro não acontece.

Alguém sabe dizer o porquê?

1 resposta
solução!

O problema do código original é o "else", se o lance for maior que "maiorDeTodos" nem irá avaliar o segundo if, o que vai ser um problema em alguns cenários.

            if(lance.getValor() > maiorDeTodos) maiorDeTodos = lance.getValor();
            else if(lance.getValor() < menorDeTodos) menorDeTodos = lance.getValor();

Já no seu código usando recursos do Java 8 não temos esse problema pois Collections.max e Collections.min vai percorrer a lista e pegar o maior/menor valor, sem problemas de lógica como no código original