06 - La Forja: los informes del gremio en una línea
Los informes siguen con bucles manuales: sumar el poder de toda la plantilla exige acumulador, filtrar ítems de una rareza exige un if dentro de un for, y buscar un héroe es la tercera vez que se escribe el mismo bucle de búsqueda. El paso aplica el tema: lambdas e interfaces funcionales, API Stream y la clase Optional.
1. Qué se pide
- El gremio gana un día de informes — cada uno declarativo, sin bucles a mano:
- Poder total del gremio (suma del poder de toda la plantilla).
- ¿Alguien veterano?: una respuesta de sí/no para “¿hay algún héroe de nivel máximo?”
- Capitán del gremio: el héroe de mayor poder.
- Selección de la forja: los ítems de una rareza pedida, como nueva colección.
- La agrupación por clase del paso 04, pero declarativa.
- La búsqueda de héroes deja de devolver posiciones de la suerte (
-1): su firma ya dice que puede no encontrar nada, y el que llama decide qué hacer con lo ausente — en La Forja, lanzar la excepción propia del paso 05. - Los bucles manuales que quedaban desaparecen: si un informe sigue con
forcuando en clase se vio cómo se hace sin él, se defiende por qué.
2. Con qué
- Todo lo del tema: lambdas, interfaces funcionales(predicate, function, consumer, supplier), operadores intermedios y terminales de Stream (filtrar, transformar, agrupar, sumar, comprobar, elegir), y
Optionalpara el resultado que puede no existir. - Cuida el nombre de la operación: si el informe es una suma, que se lea como suma; si es una comprobación, que no termine acumulando ni ordenando. La regla del tema: el código se lee como la frase que lo describe.
3. Decisiones tuyas
- ¿Devuelve el capitán un héroe o algo que *puede ser* un héroe? Y si no hay nadie en la plantilla, ¿lanza, devuelve ausente o muestra consola? Justifica el camino.
- ¿La agrupación por clase produce qué estructura y en qué orden llega? ¿Le importa al que imprime?
- ¿Dónde vive cada informe y qué expone: números crudos o colecciones listas para imprimir? ¿Quién decide el formato final?
- ¿La comprobación de los veteranos cuenta a los veteranos o pregunta solo si hay? Son informes distintos — y uno de ellos desperdicia trabajo si lo eliges mal.
- ¿Los ítems de una rareza comparten estructura con los héroes de una clase: es el mismo informe con otras palabras?
4. Comprobación
- Los bucles
forque quedaban en los informes han desaparecido: cada informe se lee de arriba abajo como una frase. - El poder total con una plantilla vacía no rompe nada: devuelve y se muestra lo decidido.
- El busca héroe que no existe pasa por el canal propio del paso 05, sin
nullpor el medio. - El ítem que no existe no rompe nada: la selección devuelve colección válida (vacía).
- El capitán de un gremio de un solo héroe es ese héroe.
- Las pruebas de los pasos anteriores pasan enteras.
5. Pendientes
- El proyecto es un puñado de clases en el paquete por defecto; sin estructura y sin gestor → paquetes y Maven (07).
- El fichero de configuración aún se parsea a mano → con una librería de JSON (07).