1
resposta

[Projeto] Projeto Final - Tabela Fipe

Meu código Main (Principal) ficou assim:

package br.com.tabelafipe.main;

import br.com.tabelafipe.model.*;
import br.com.tabelafipe.services.ConsumoApi;
import br.com.tabelafipe.services.ConverteDados;

import java.util.*;

public class Main {
    private static Scanner leitura = new Scanner(System.in);
    private static String endereco = "https://parallelum.com.br/fipe/api/v1/";
    private static ConsumoApi consumo = new ConsumoApi();
    private static ConverteDados conversor = new ConverteDados();
    private static List<VeiculoDto> veiculoDto;
    private static List<Veiculo> veiculos;

    private static List <ModeloVeiculo> listaModelos;
    private static ModeloVeiculoDto modelosVeiculosDto;
    private static List<TabelaDto> tabela;

    public static void opcaoVeiculo(){
        System.out.println("""
                *******OPÇÕES*******
                Carro
                Moto
                Caminhão""");
        System.out.print("Digite uma das opções para consultar valores: ");

        String opcao = leitura.nextLine();
        String respostaVeiculo = null;

        if (opcao.equalsIgnoreCase("carro")){
            endereco += "carros/marcas/";
            respostaVeiculo = consumo.obterDados(endereco);
        } else if (opcao.equalsIgnoreCase("moto")) {
            endereco += "motos/marcas/";
            respostaVeiculo = consumo.obterDados(endereco);
        }else if (opcao.equalsIgnoreCase("caminhão")){
            endereco += "caminhoes/marcas/";
            respostaVeiculo = consumo.obterDados(endereco);
        } else{
            System.out.println("Opção invalida. Tente novamente ");
            return;
        }
        System.out.println(respostaVeiculo);
        veiculoDto = List
                .of(conversor.obterDados(respostaVeiculo, VeiculoDto[].class));

        veiculos = veiculoDto.stream()
                .map(v -> new Veiculo(v.nome(), v.id()))
                .toList();

        veiculos.stream()
                .sorted(Comparator.comparing(Veiculo::getId))
                .forEach(System.out::println);

    }


    public static void opcaoMarca(){
        System.out.print("Digite o codigo da marca para consulta: ");
        int opcao = leitura.nextInt();
        endereco+= opcao + "/modelos/";

        String respostaModelo =  consumo.obterDados(endereco);

        modelosVeiculosDto = conversor.obterDados(respostaModelo, ModeloVeiculoDto.class);

        listaModelos =  modelosVeiculosDto.veiculos().stream()
                .map(m -> new ModeloVeiculo(m.nome(), m.id())).toList();

        listaModelos.stream()
                .sorted(Comparator.comparing(Veiculo::getId))
                .forEach(System.out::println);
    }

    public void opcaoVeiculoNome(){
        System.out.print("digite um trecho do nome do veiculo para consulta: ");
        leitura.nextLine();
        String trecho = leitura.nextLine();
        listaModelos.stream().filter(m -> m.getNome().toLowerCase()
                        .contains(trecho.toLowerCase())).sorted(Comparator.comparing(ModeloVeiculo::getId))
                .forEach(System.out::println);
    }

    public void consultaTabelaFipe(){
        System.out.print("digite o codigo do modelo para consulta: ");
        String opcao = leitura.nextLine();
        endereco+= opcao + "/anos/";
        String resposta = consumo.obterDados(endereco);

        tabela = List.of(conversor.obterDados(resposta, TabelaDto[].class));
        List<TabelaFipeDto> tabelaFipe = new ArrayList<>();
        TabelaFipeDto tabelaFipeDto;

        System.out.println("Todos os valores por ano: ");
        for(TabelaDto tab : tabela){
            String tabelaStr = consumo.obterDados(endereco + tab.codigo());
            //System.out.println(tabelaStr);
            tabelaFipeDto = conversor.obterDados(tabelaStr, TabelaFipeDto.class);
            tabelaFipe.add(tabelaFipeDto);
        }

        tabelaFipe.stream().forEach(System.out::println);
        //System.out.println(tabela);
    }

    public void exibirMenu(){
        opcaoVeiculo();
        opcaoMarca();
        opcaoVeiculoNome();
        consultaTabelaFipe();

    }
}
1 resposta

Olá, Arthur! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso da API da Tabela Fipe para consultar dados de veículos, utilizou muito bem o Stream para mapear e ordenar os resultados e ainda compreendeu a importância de organizar o fluxo em métodos distintos para cada etapa da consulta.

Permaneça postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!