Haga coincidir Lambdas con interfaces en Java

Uno de los temas más populares e importantes es la expresión lambda en Java, pero antes de pasar directamente a nuestra discusión, veamos algunas cosas importantes. Comenzando con las interfaces en java como interfaces, están los tipos de referencia que son similares a las clases pero que contienen solo métodos abstractos. Esta es la definición de interfaz que teníamos antes de Java 1.8. Como antes de la versión 1.8 de Java, estamos usando cualquier versión, las interfaces son de tres tipos, a saber, como se indica a continuación:

  • Interfaz normal
  • Interfaz con múltiples métodos.
  • Interfaz de marcador (las interfaces no contienen ningún método).

A partir de 1.8, todas las interfaces SAM (método abstracto único) se denominan interfaz funcional.

Interfaz funcional: la interfaz funcional es una interfaz que contiene exactamente un método abstracto, pero el punto importante es recordar que puede tener cualquier cantidad de métodos predeterminados o estáticos junto con los métodos de clase de objeto, ya que esto es lo que más confunde a los programadores.

Ejemplo:

Java

// Java Program to Illustrate Functional Interface
 
// Importing required classes
import java.io.*;
 
// Interface
@FunctionalInterface
interface display {
 
    // Attribute
    void show(String msg);
 
    // Method
    // To compute the sum
    default int doSum(int a, int b) { return a + b; }
}
 
// Main class implementing the above interface
class GFG implements display {
 
    // Overriding the existing show() method
    @Override
 
    public void show(String msg)
    {
 
        // Print message
        System.out.println(msg);
    }
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating object of class inside main()
        GFG object = new GFG();
 
        // Calling show() method in main()
        object.show("Hello World!");
 
        // Print statement
        System.out.println(object.doSum(2, 3));
    }
}
Producción

Hello World!
5

Además, ahora analicemos cuáles son las clases anónimas. La clase anónima solo se crea para un uso único, no podemos reutilizarla. La pregunta que debe hacerse es ¿por qué necesitamos este tipo de clase? En algunos escenarios, como cuando nuestro único propósito es anular un método, puede usarlo. Ahora, otra ventaja de esto es que con la ayuda de esto podemos instanciar la interfaz muy fácilmente.

Ejemplo: suponga que desea reservar un taxi 

Java

// Java Program to Illustrate Functional Interface
// With the Usage of Anonymous class
 
// Importing input output classes
import java.io.*;
 
// Interface
@FunctionalInterface
interface Cab {
 
    void bookCab();
}
 
// Main class
class GFG {
 
    // Method 1
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating object of above functional interface
        Cab cab = new Cab() {
            // Method 2
            // Overriding above bookCab() method
            @Override public void bookCab()
            {
 
                // Print statement
                System.out.println(
                    "Booking Successful!! Arriving Soon!!");
            }
        };
 
        cab.bookCab();
    }
}
Producción

Booking Successful!! Arriving Soon!!

Ahora es el momento adecuado para discutir las expresiones lambda en Java. Es una de las características importantes de Java 8. De hecho, las expresiones Lambda son el enfoque fundamental para la programación funcional en Java. Es una función anónima que no tiene nombre y no pertenece a ninguna clase. Esto en sí mismo es un gran tema que se ha discutido antes. Y debe tener una idea al respecto antes de saber de lo que estamos hablando.

Ahora hemos terminado de discutir todos los conceptos antes de aterrizar en ¿cómo podemos hacer coincidir la expresión lambda con la interfaz?

  • La expresión Lambda solo funciona con interfaces funcionales en Java.
  • Lambda expression proporciona una forma clara y concisa de representar una interfaz de método a través de una expresión.
  • Proporciona la implementación de una interfaz funcional y simplifica el desarrollo de software.
  • Podemos eliminar fácilmente el código repetitivo con la ayuda de la expresión Lambda.

Sintaxis:  

Parameter  -> expression body

Veamos nuestro código de una manera diferente porque ya hemos visto un ejemplo de clase anónima antes, ya que aquí creamos una lista de enteros y queremos ordenarlos según su último dígito.

Ejemplo 

Java

// Java Program Without Using Lambda Expression
 
// Importing all utility classes
import java.util.*;
 
// Main class
class GFG {
 
    // main driver method
    public static void main(String[] args)
    {
 
        // Creating an List of integer type
        List<Integer> list = Arrays.asList(
            234, 780, 451, 639, 456, 98, 75, 43);
 
        // Printing List before sorting
        System.out.println("Before Sorting");
 
        for (int i : list)
            System.out.print(i + " ");
 
        System.out.println();
 
        // Comparator is a functional interface
        // which is helps to sort object
        Collections.sort(list, new Comparator<Integer>() {
            // Overriding the existing compare method
            @Override
            public int compare(Integer a1, Integer a2)
            {
 
                return a1 % 10 > a2 % 10 ? 1 : -1;
            }
        });
 
        // Printing the list after sorting
        System.out.println("After Sorting");
 
        for (int i : list)
            System.out.print(i + " ");
 
        System.out.println();
    }
}
Producción

Before Sorting
234 780 451 639 456 98 75 43 
After Sorting
780 451 43 234 75 456 98 639 

Características de la expresión Lambda 

  • Declaración de tipo opcional
  • Paréntesis opcional alrededor de los parámetros.
  • Llaves opcionales para una línea de código.
  • Palabra clave de retorno opcional.

La expresión lambda puede tomar parámetros como un método.

Ejemplo 1 Expresión lambda con parámetro cero 

Java

import java.io.*;
 
interface Display{
  void show();
}
 
class GFG{
   
  public static void main(String[] args){
   
    Display display= ()->System.out.println("Welcome");
     
    display.show();
      
  }
}
Producción

Welcome

Ejemplo 2: Expresión lambda con varios parámetros

Java

// Java Program to Illustrate Lambda Expression
// with Multiple Parameter
 
// Importing required classes
import java.util.*;
 
// Main class
class GFG {
 
    // main driver method
    public static void main(String[] args)
    {
 
        // Creating a List of integer type
        List<Integer> list
            = Arrays.asList(24, 346, 78, 90, 21, 765);
 
        // Printing before sorting
        System.out.println("Before sorting.");
 
        for (int i : list)
            System.out.print(i + " ");
 
        System.out.println();
 
        // Sort the integers based on second digit
        Collections.sort(list, (a1, a2) -> {
            return a1 % 10 > a2 % 10 ? 1 : -1;
        });
 
        // Printing after sorting
        System.out.println("After sorting.");
 
        for (int i : list)
            System.out.print(i + " ");
 
        System.out.println();
    }
}
Producción

Before sorting.
24 346 78 90 21 765 
After sorting.
90 21 24 765 346 78 

Publicación traducida automáticamente

Artículo escrito por susmitabhattacharya2023 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *