Cargando...

Lambda en Java

Pasas una acción corta a forEach con una flecha. En Cue.java mantienes la clase pública Cue, importas java.util.ArrayList, guardas "oak" en una lista tipada y llamas names.forEach(n -> System.out.println(n));. Compila con javac Cue.java y ejecuta java Cue. La pantalla debería mostrar oak. Una segunda demo añade "pine" para que la pantalla muestre oak, luego pine. Deja Streams opcional para la página siguiente. Esta lección es un lambda pasado a forEach, no una demo de Generics con get(0) ni args de línea de comandos.

Un elemento, una impresión lambda

Abre Cue.java. Mantén el nombre de clase pública Cue. Borra demos sobrantes de Bin generics, ejecuciones sobrantes de argumentos del programa Flag, avisos Scanner de Box e historial Shelf sobrante si entierran la historia del lambda. El programa no debe esperar tecleo ni exigir palabras al lanzar.
Añade el import arriba:
import java.util.ArrayList;
Dentro de Cue.main construyes una lista tipada, añades una palabra y pasas un lambda a forEach:
ArrayList<String> names = new ArrayList<>();
names.add("oak");
names.forEach(n -> System.out.println(n));
La parte n -> System.out.println(n) es el lambda. n es el nombre del parámetro para un elemento. La flecha -> apunta al cuerpo que se ejecuta para ese elemento. forEach llama ese cuerpo una vez para "oak". La pantalla muestra oak.

Cue forEach lambda prints oak

java
import java.util.ArrayList;

public class Cue {
    public static void main(String[] args) {
        ArrayList<String> names = new ArrayList<>();
        names.add("oak");
        names.forEach(n -> System.out.println(n));
    }
}

Desde la carpeta que contiene Cue.java ejecuta javac Cue.java. Cuando llaves y punto y coma coinciden, javac no escribe una línea propia. Luego ejecuta java Cue — no java Cue.java. Mantén una sola clase pública para que el nombre coincida con Cue.
Recorre la ejecución una vez. Java empieza en Cue.main. La lista guarda "oak". forEach recibe el lambda. En el primer (y único) elemento, n es "oak" y println escribe oak. Nada llama get(0) en esta forma didáctica. Nada imprime 3 de una demo Integer en Bin. Nada lee args[0].
Di la regla de principiante mientras miras la pantalla: forEach recorre la lista; el lambda es la acción por elemento; la flecha separa el parámetro del cuerpo. No inventes pipelines de Streams en esta página. Streams espera la lección opcional siguiente. No sustituyas el lambda por un método con nombre completo en este archivo didáctico — conserva la forma con flecha.
Si sigues viendo solo oak con names.get(0) en un archivo Bin sobrante, cambia a Cue y conserva la línea forEach. Si javac rechaza la flecha, comprueba que escribiste -> y que el lambda está dentro de forEach(...).

Dos elementos, el mismo lambda

Mantén la misma clase pública Cue. Añade una segunda palabra antes de forEach:
names.add("oak");
names.add("pine");
names.forEach(n -> System.out.println(n));
Compila otra vez con javac Cue.java y ejecuta java Cue. La pantalla muestra oak, luego pine. forEach ejecuta el lambda una vez por elemento en orden. El cuerpo del lambda no cambia. Solo cambió la longitud de la lista.

Cue forEach lambda prints oak then pine

java
import java.util.ArrayList;

public class Cue {
    public static void main(String[] args) {
        ArrayList<String> names = new ArrayList<>();
        names.add("oak");
        names.add("pine");
        names.forEach(n -> System.out.println(n));
    }
}

Recorre la ejecución una vez. Primera llamada: n es "oak", imprime oak. Segunda llamada: n es "pine", imprime pine. Conserva las dos demos como dos formas didácticas. Primero demuestras una impresión lambda con una palabra. Luego demuestras el mismo lambda con dos elementos. Ambas formas comparten import, lista tipada y n -> System.out.println(n).
Si imprimes toda la lista con println(names) en lugar de forEach, ves corchetes y comas — es otro hábito. Esta página mantiene una impresión por elemento mediante el lambda.

Lambda no es solo Generics ni Streams

Generics nombró el tipo de elemento en ArrayList<String>. Lambda da a forEach una acción corta sin escribir un método con nombre aparte en esta página. Streams encadenará más pasos de lista en una página opcional posterior. No mezcles esas tres tareas en un solo archivo de principiante hoy.
oak aquí es un elemento de lista visitado por forEach. No es args[0] de Flag ni una respuesta del Scanner. Cuando un archivo Bin sobrante solo imprime get(0), déjalo como historial y conserva la línea forEach de Cue. Cuando un archivo Flag sobrante aún necesita java Flag oak, deja ese hábito de lanzamiento y ejecuta java Cue a secas.
Sin la flecha, javac no puede tratar la acción como lambda. Sin forEach, el lambda no tiene dónde ejecutarse en esta forma didáctica. Mantén ambas piezas juntas mientras practicas. Deja sintaxis de Streams como .stream().map fuera de esta página hasta esa lección, aunque hayas visto la palabra Stream en otro titular.

Comprobaciones de carpeta antes de Streams

Lista la carpeta tras una compilación correcta. Deberías ver Cue.java y Cue.class juntos. Edita el código fuente, guarda, ejecuta javac Cue.java, luego java Cue. Un .class antiguo puede mostrar una pantalla de una línea vieja si omites compilar tras añadir "pine".
Si javac se queja de clases públicas duplicadas, deja solo Cue como pública. Si la pantalla muestra [oak, pine] en una línea, imprimiste el objeto lista — vuelve a forEach con println dentro del lambda. Si no imprime nada, confirma que add corrió antes de forEach.
No pegues get(0) de Bin como reemplazo del lambda en esta página. No pegues palabras de lanzamiento de Flag en el comando de ejecución. El trabajo opcional de lambda es forEach con cuerpo en flecha.

Antes de Streams opcional

Puedes mantener la clase pública Cue, importar ArrayList, añadir "oak", llamar names.forEach(n -> System.out.println(n));, ver oak, luego añadir "pine" y ver oak luego pine. Compila con javac Cue.java y ejecuta java Cue. La página opcional siguiente es Streams.
Conserva las demos de Cue como un par lambda claro. Mantén archivos generics de Bin fuera de esta página cuando practiques forEach. Mantén archivos de argumentos Flag fuera de esta página cuando practiques forEach. Mantén trabajo de Streams fuera de esta página hasta esa lección. Esos hábitos son el control antes de seguir. Cuando la pantalla de una palabra muestra oak o la de dos palabras muestra oak luego pine, Lambda cumplió su papel en esta lección y estás listo para Streams si continúas la ruta opcional.
Un último repaso de la carpeta: un Cue público, import presente, ArrayList<String> tipado, forEach con n -> System.out.println(n), sin espera de Scanner, sin palabras de lanzamiento. Ejecuta javac Cue.java y java Cue una vez más con la demo que tengas abierta. Si la pantalla sigue mostrando oak o oak luego pine, la forma Lambda es sólida y el curso puede pasar a Streams opcional en la página siguiente. Prefiere un hábito forEach claro en cada lectura para que cada paso enseñe el mismo mapa.

🧠 Pon a Prueba tu Conocimiento

Listo para Empezar

Pon a Prueba tu Conocimiento

Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema

❓
5
Preguntas
🎯
70%
Para Aprobar
♾️
∞
Tiempo
🔄
∞
Intentos

📝 Instrucciones

  • Lee cada pregunta cuidadosamente
  • Selecciona la mejor respuesta para cada pregunta
  • Puedes repetir el quiz tantas veces como quieras
  • Tu progreso se mostrará en la parte superior