Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

[Duda] punto 5) 'Convirtiendo los datos’ (trello)

Buen día estimado mentor y comunidad, reciban saludos!!!

Para el desafío LiterAlura estoy perdido para realizar el ‘punto 5 convirtiendo los datos’. A continuación, doy el siguiente contexto. Por favor, leer y comentar.

Contexto:

Practicando y siguiendo el ejercicio del mentor Gênesis Rondon para, construir el desafío ‘punto 5) Convirtiendo los datos’ (trello) logrando: Una clase para consumo Api httpclient, request además del response. Una clase conversor de datos implementando una interface y tres records. 1) record Datos.java crea lista del consumo del API ‘results’ de datos a partir de los libros, estos contienen sub-listas, 2) record DatosLibros.java con la estructura de los datos de los libros y las sub-listas para autores y lenguajes, 3) record DatosAutor.java para los datos propios del autor como nombre y fecha de nacimiento.

Al ejecutar lo anterior, se cumple el consumo el API, mostrando el resultado 'data' obtenido de los ‘records’ pero, aún no puedo manipular cada uno; por ejemplo, obtengo la lista de DatosAutor.java pero no puedo separar autor de la fecha de nacimiento. Seguro es porque no tengo el getter, setter y el método toString() solicitado en punto ‘5 Convirtiendo los datos’ (trello) (ver debajo)

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Podría guiarme por favor, pues estoy confundido y deseo aprender ¿Sí, debo crear una nueva clase o utilizar alguna de las existentes para este fin?

Agradeciendo de antemano su orientación y guía a sus comentarios, les deseo un Feliz día, Alberto

2 respuestas

Hola Alberto, ¡espero que estés bien!

¿Podría mostrar como está el código de sus records DatosLibros y DatosAutor?

El objeto con datos del autor es el primer elemento (índice 0) del resultado (una lista) en la línea 111.

Sería interesante intentar acceder a ese índice y pasar sus datos a la clase de Autor y así tener el objeto con los atributos separados correctamente.

Creo que pudes intentar algo como autorLibroBuscado.get().autor().get(0); para acceder al índice y hacer tu objeto de Autor.

Avísame si funciona, y si tienes más preguntas puedes hablar :)

¡Saludos y buenos estudios!

Buen día y, muchas gracias por el seguimiento estimada Brenda S.

Aquí comparto como se muestra el código de los records.

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Intente mostrar el dato por índice como sugirió, pero sin éxito.

Consumiendo el API directamente con la siguiente URL gutendex.com/books/?author_year_start=1900&languages=es,fr resulta el registro debajo que me sirve para comparar el resultado de los tres idiomas con el bloque de código que intento crear

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

El bloque de código para la búsqueda dentro de la clase Principal.java es el siguiente

                    case "6":
                        System.out.println("Ingrese el nombre del autor que desea buscar");
                        var nombreAutor = teclado.nextLine();
                        json = consumoAPI.obtenerDatos(URL_BASE+"?search=" + nombreAutor.replace(" ", "+"));
                        
                        System.out.println("ini.TEST");
                        
                        
                        var datosBusquedaAutor = conversor.obtenerDatos(json, Datos.class);
                        Optional<DatosLibros> autorLibroBuscado = datosBusquedaAutor.resultados().stream()
                            //.sorted()
                            .filter(l2->l2.titulo().toUpperCase().contains(nombreAutor.toUpperCase()))
                            .findFirst()
                            ;
                            System.out.println("R1:...."+autorLibroBuscado.get().autor());
                            System.out.println("R2:...."+autorLibroBuscado.get().idiomas());

                            var lAutorLibroBuscado = autorLibroBuscado.stream()
                                .sorted()
                                .flatMap(a -> a.autor().stream()
                                )
                                .collect(Collectors.toList())
                                ;
                                System.out.println("lAutorLibroBuscado "+lAutorLibroBuscado);
                                System.out.println("soporte1:"+autorLibroBuscado.get().autor().get(0));
                                System.out.println("soporte2:"+autorLibroBuscado.get().idiomas().get(1));

                            lAutorLibroBuscado.stream()
                                .forEach(System.out::println);

                            System.out.println("final idiomas");

                    break;

lo anterior sin éxito, solo muestra un idioma

Lo que observo del Api es que, ”results” es una lista/arreglo que a su vez contiene sub-listas/arreglos como, authors ó en el caso de languages que contiene en algunos casos hasta tres elementos por ejemplo "en", "es", tl".

Estoy intentando trabajar con los elementos de la lista/arrego y también con los de las sub-listas/arreglos. Espero me pueda orientar nuevamente. si hay algún video del entrenamiento que deba reforzar, agradezco sus sugerencias y comentarios

Saludos

ALberto