Clases Anónimas Y Lambdas

Clases Anónimas y Lambdas

List<String> lista = Arrays.asList("En", "un", "lugar", "de", "la", "Mancha");

Collections.sort(lista, new Comparator<String>() {
    //Ordenar la cadena por su longitud
    @Override
    public int compare(String st1, String st2) {
        // TODO Auto-generated method stub
        return st1.length() - st2.length();
    }
});

En este ejemplo se está creando una clase anonima en tiempo de compilación que implementa la interfaz o extiende una clase existente. Esa clase anónima tiene un nombre generado automáticamente por el compilador, y se trata como cualquier otra clase en tiempo de ejecución.

Lambdas

Las expresiones lambda, introducidas en Java 8, no crean clases anónimas por detrás. En cambio, el compilador de Java trata las lambdas de manera diferente y optimiza su implementación.

Las lambdas son vistas como instancias de funciones o métodos que implementan una interfaz funcional (una interfaz con un solo método abstracto, como Comparator en tu caso). El compilador las traduce usando una técnica llamada invokedynamic (una instrucción en la máquina virtual de Java, introducida en Java 7) para invocar dinámicamente la lambda.

Esto significa que en lugar de crear una clase anónima, el compilador genera un código más eficiente que hace referencia a una instancia del método a ejecutar en tiempo de ejecución. Es más ligero y tiene mejor rendimiento.

(str1, str2) -> str1.length() - str2.length();

Esta lambda es una instancia de una interfaz funcional, en este caso, Comparator<String>, pero no implica la creación de una clase como sucede con las clases anónimas.

Ventajas de las Lambdas:

  • Menor sobrecarga de memoria: Al no crear una clase nueva, las lambdas consumen menos recursos.
  • Sintaxis más concisa y legible.
  • Mejores optimizaciones en tiempo de compilación y ejecución.