1
resposta

[Projeto] Calculando estatísticas das notas

import java.util.List;

public class Principal {
    public static void main(String[] args) {
        List<Double> notas = List.of(7.5, 8.0, 6.5, 9.0, 10.0);
        double totalNotas = notas.stream()
                .reduce(0.0, Double::sum);

        double media = totalNotas / notas.size();

        double maiorNota = notas.stream()
                .max(Double::compare).get();

        double menorNota = notas.stream()
                .min(Double::compare).get();

        System.out.printf("A média das notas é: %.1f%n", media);
        System.out.printf("A menor nota foi: %.1f%n", menorNota);
        System.out.printf("A maior nota foi: %.1f%n", maiorNota);
    }
}

Saída:

A média das notas é: 8,2
A menor nota foi: 6,5
A maior nota foi: 10,0
1 resposta

Olá, Aline!

Que ótimo ver que você já está explorando as Streams do Java! Seu código está correto, conciso e segue as melhores práticas para calcular a média, o valor máximo e o mínimo de uma lista de notas.

O uso dos métodos reduce, max, e min do Stream API demonstra um ótimo entendimento de como processar coleções de forma funcional em Java.

Observações sobre o Código

Seu código está perfeito e atende completamente ao que foi proposto. Aqui estão apenas algumas notas que reforçam o quão bem você o implementou:

  1. Cálculo da Média (reduce):
    Você utilizou o reduce com Double::sum, que é o jeito mais elegante e funcional de somar os elementos.

    double totalNotas = notas.stream()
            .reduce(0.0, Double::sum);
    // ...
    double media = totalNotas / notas.size();
    

    Como alternativa e para fins de estudo, você também poderia ter usado o average() do DoubleStream (que é gerado pelo mapToDouble), mas sua solução é igualmente eficiente e clara.

  2. Maior e Menor Nota (max e min):
    Você utilizou os métodos max e min junto com o Double::compare. Como esses métodos retornam um Optional<Double> (pois a lista poderia estar vazia), você usou corretamente o .get() para extrair o valor, garantindo que o código funcione para a sua lista que não é vazia.

    double maiorNota = notas.stream()
            .max(Double::compare).get();
    
  3. Formatação de Saída:
    O uso do System.out.printf com %.1f é perfeito para formatar as notas com uma casa decimal, como é comum em notas.

Seu código é um excelente exemplo de como aplicar o paradigma funcional em Java para estatísticas simples.

Continue explorando o Stream API. Ele oferece recursos poderosos que tornam o código mais legível e menos propenso a erros! Parabéns!