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();
}
}