1
resposta

[Projeto] Desafios Spring

Ex1 :

public class ContadorApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(ContadorApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a random number :");
        int number = sc.nextInt();
        for(int i = 1; i<=number;i++){
                System.out.print(i+",");
        }
    
    }
}

Ex 4,5 :

TaskSerialization :

public abstract class TaskSerialization {

    public static String serialize(Tarefa tarefa) {
        try{
            ObjectMapper mapper = new ObjectMapper();
            String json = mapper.writeValueAsString(tarefa);
            return json;
        }catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }
}

Deserialize :

public class Deserialize implements IDeserialize {
    private ObjectMapper objectMapper = new ObjectMapper();

    @Override
    public <T> T desserialize(Class<T> tClass, File json) {
        try{
            return objectMapper.readValue(json,tClass);

        } catch (StreamReadException e) {
            throw new RuntimeException(e);
        } catch (DatabindException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }
}

IDeserialize:

public interface IDeserialize {
    public <T> T desserialize(Class<T> tClass, File json);
}

WriteJsonInFile:

public abstract class WriteJsonInFile {

    public static void writeJson(File file, String json){
        try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file))){
            bufferedWriter.write(json);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

ContadorApplication :

public void run(String... args) throws Exception {

        File file = new File("tarefa.json");
        Tarefa tarefa = new Tarefa("Fazer serialização de objeto",true,"Igor");
        String json = TaskSerialization.serialize(tarefa);
        System.out.println(json);
        WriteJsonInFile.writeJson(file,json);

        Deserialize deserialize = new Deserialize();
        Tarefa deserializedTarefa = deserialize.desserialize(Tarefa.class,file);
        System.out.println(deserializedTarefa);
    }

Ex 6:
Rating :

public class Rating<T> {
    private T tipoAvaliacao;
    int nota;
    String comentarioAvaliacao;

    public Rating(T tipoAvaliacao, int nota) {
        if(nota<0 || nota>5){
            throw new IllegalArgumentException("Valor de nota deve ser entre 0 a 5");
        }
        this.tipoAvaliacao = tipoAvaliacao;
        this.nota = nota;
    }

    public Rating(T tipoAvaliacao, int nota, String comentarioAvaliacao) {
        if(nota<0 || nota>5){
            throw new IllegalArgumentException("Valor de nota deve ser entre 0 a 5");
        }
        this.tipoAvaliacao = tipoAvaliacao;
        this.nota = nota;
        this.comentarioAvaliacao = comentarioAvaliacao;
    }

    @Override
    public String toString() {
        return "Avaliacao{" +
                "tipoAvaliacao=" + tipoAvaliacao +
                ", nota=" + nota +
                ", comentarioAvaliacao='" + comentarioAvaliacao + '\'' +
                '}';
    }

    public double avgCalculate(List<Rating<T>> listOfRatings){
        double ratingSum = 0;
        for(Rating<T> rating : listOfRatings){
            ratingSum += rating.getNota();
        }
        return ratingSum/listOfRatings.size();
    }

    public T getTipoAvaliacao() {
        return tipoAvaliacao;
    }

    public int getNota() {
        return nota;
    }

    public void setNota(int nota) {
        if(nota<0 || nota>5){
            throw new IllegalArgumentException("Valor de nota deve ser entre 0 a 5");
        }
        this.nota = nota;
    }

    public String getComentarioAvaliacao() {
        return comentarioAvaliacao;
    }

    public void setComentarioAvaliacao(String comentarioAvaliacao) {
        this.comentarioAvaliacao = comentarioAvaliacao;
    }
}

Main:

@SpringBootApplication
public class ContadorApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(ContadorApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {

        Tarefa instalarCanos = new Tarefa();
        Rating<Tarefa> reclamacao = new Rating<>(instalarCanos,2,"Canos mal instalados");
        System.out.println(reclamacao);
    }
}
1 resposta

Oi, Igor! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

O seu projeto mostra uma organização interessante ao separar responsabilidades em classes diferentes, como TaskSerialization, WriteJsonInFile e Deserialize. Isso demonstra uma boa prática de separação de responsabilidades, além do uso correto do ObjectMapper para serialização e desserialização de objetos.

Outro ponto que chama atenção é a validação da nota na classe Rating<T>, garantindo que os valores estejam entre 0 e 5, o que ajuda a manter a consistência dos dados.

Você pode utilizar Streams do Java para simplificar cálculos em listas, como no método avgCalculate. Isso deixa o código mais enxuto e alinhado com práticas modernas do Java.


import java.util.List;

public double avgCalculate(List<Integer> notas){
    return notas.stream()
        .mapToInt(n -> n)
        .average()
        .orElse(0);
}

Nesse código, stream() percorre a lista de notas, mapToInt converte os valores para inteiro e average() calcula automaticamente a média dos valores.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!