0
respostas

[Praticando] - Desafio da plataforma de áudio.

Sei que o que fiz para este desafio não se adequa muito bem ao que foi proposto no desafio, mas queria compartilhar mesmo assim só para que outros iniciantes assim como eu possam ver uma forma diferente de se criar uma class por meio do tipo especial record, ele é tipo um substituto para o lombok que utiliza de anotações para criação de metodos com os Getters & Setters, usando @lombok.Getter & @lombok.Setter além de construtores com @lombok.AllArgsConstructor @NoArgsConstructor, observação, não é necessário fazer a chamada @lombok... só precisar passar o tipo @Getters ou @Setters, a chamada do lombok é tipo você fazer o import static de um método. E o record veio para meio que substituir o uso dele por uma biblioteca própria do java, introduzida na versão 14 como preview, e lançada oficialmente na versão 16 em diante. Ele já faz para você a criação automática dos metodos Getters & Setters, Construtor, metodos Equels, HashCode. O único porem é que ele é imutável, ou seja, ele não muda é constante. Aqui tá como fica uma class usando deste tipo especial do java:

package rickmviana.com.github.type;

/**
 * Representa um áudio com título, duração, número de reproduções, curtidas e classificação.
 */
public record Audio(
        String titulo,          // Nome do áudio
        double duracaoSegundos, // Duração em segundos
        int totalReproducoes,   // Total de vezes reproduzido
        int curtidas,           // Número de curtidas
        int classificacao       // Classificação (ex: 1 a 5 estrelas)
) {

    /**
     * Retorna uma nova instância de Audio com uma curtida a mais.
     *
     * @return Novo objeto Audio com curtidas incrementadas.
     */
    public Audio curtir() {
        return new Audio(titulo, duracaoSegundos, totalReproducoes, curtidas + 1, classificacao);
    }

    /**
     * Simula a reprodução do áudio, exibindo informações sobre ele.
     */
    public void reproduzir() {
        System.out.println(
                "Reproduzindo áudio: '" + this.titulo() +
                        "' com duração de " + this.duracaoSegundos() + " segundos."
        );
    }

    /**
     * Retorna a duração do áudio em minutos.
     *
     * @return Duração convertida para minutos.
     */
    public double duracaoMinutos() {
        return this.duracaoSegundos() / 60;
    }
}

Class Main

package rickmviana.com.github;

import rickmviana.com.github.type.Audio;
import java.util.ArrayList;
import java.util.List;

/**
 * Classe de teste para manipular e exibir informações de áudios.
 */
public class Test04 {
    public static void main(String[] args) {
        // Criando uma lista de áudios
        List<Audio> listaDeAudios = new ArrayList<>();
        listaDeAudios.add(new Audio("Christmas Snow - Rainy | Piano Tiles 2", 92, 29000, 552, 4));
        listaDeAudios.add(new Audio("Land of Hope and Glory - Edward Elgar", 115, 24000, 341, 3));
        listaDeAudios.add(new Audio("Chopin, Waltz in A minor, B 150, Op. Posth", 157, 6500000, 115000, 5));

        // Exibindo todos os áudios na lista
        listaDeAudios.forEach(System.out::println);

        // Reproduzindo o primeiro áudio da lista
        listaDeAudios.getFirst().reproduzir();

        // Exibindo o título e a duração em minutos do último áudio
        Audio ultimoAudio = listaDeAudios.getLast();
        System.out.printf("%s - Duração: %.2f minutos%n", ultimoAudio.titulo(), ultimoAudio.duracaoMinutos());

        // Adicionando curtida ao último áudio e exibindo nova contagem
        Audio atualizado = ultimoAudio.curtir();
        System.out.println("Curtidas após like: " + atualizado.curtidas());

        // Exibindo informações do segundo áudio na lista
        Audio segundoAudio = listaDeAudios.get(1);
        System.out.println("Classificação: " + segundoAudio.classificacao() + " - Curtidas: " + segundoAudio.curtidas());
    }
}