Sintaxis básica de expresiones Lambda

1. Gramática básica

Java8 introduce un nuevo operador "->" operador de flecha, el operador de flecha divide la expresión Lambda en dos partes

A la izquierda: la lista de parámetros de la expresión Lambda, correspondiente a la lista de parámetros del método abstracto.

Derecha: Funciones a realizar, correspondientes a funciones a implementar por métodos abstractos.

2. Consejos

Guarde un paréntesis entre izquierda y derecha, infiera el tipo a la izquierda,

3. Formato gramatical

Formato de sintaxis 1: sin parámetros, sin valor de retorno

() -> System.out.println ("Hola");

   @Test
     public  void test1 () {
         int num = 2; // Antes de jdk 1.7, debe ser final antes de que pueda ser invocado por el mismo nivel 
        Runnable r = new Runnable () { 
            @Override 
            public  void run () { 
                System.out.println ( "Hola" + num); 
            } 
        }; 
        r.run (); 

        System.out.println ( "---------------------" );
         // Usar Expresión lambda 
       Runnable r2 = () -> System.out.println ("Hola Lambda" ); 
        r2.run (); 
    }

 

Formato de sintaxis 2: hay un parámetro, sin valor de retorno

    @Test
     public  void test2 () { 
        Consumer <String> con = (x) -> System.out.println (x); 
        con.accept ( "Hay un parámetro" ); 
    }

 

Formato de sintaxis 3: si solo hay un parámetro, los paréntesis se pueden omitir sin escribir

    @Test
     public  void test2 () { 
        Consumer <String> con = x-> System.out.println (x); 
        con.accept ( "Hay un parámetro" ); 
    }

 

Formato de sintaxis cuatro: hay dos parámetros, hay un valor de retorno y hay varias declaraciones en el cuerpo de Lambda

  @Test
     public  void test4 () { 
        Comparator <Integer> com = (x, y) -> { 
            System.out.println ("Interface funcional"); 
            devuelve Integer.compare (x, y); 
        }; 
    }

 

Formato de sintaxis 5: hay dos parámetros, hay un valor de retorno y solo hay una declaración en el cuerpo de Lambda, no se puede devolver ni {}

    @Test
     public  void test5 () { 
        Comparador <Integer> com = (x, y) -> Integer.compare (x, y); 

    }

 

Formato de sintaxis 6: el tipo de datos en la lista de parámetros de la expresión Lambda puede omitirse o no escribirse,

                      Debido a que el compilador JVM deduce del contexto, el tipo de datos, es decir, "inferencia de tipo"

                      (Integer x,Integer y) -> Intrger.compare(x,y);

4. La expresión Lambda necesita soporte de "interfaz funcional"

Interfaz funcional: solo hay una interfaz de método abstracto en la interfaz, que se puede decorar con @FunctionalInterface.

// Interfaz, solo un parámetro, interfaz con 
paquete de valores de retorno
Clock; @FunctionalInterface public interface MyFun { public Integer getValue (Integer x); }
 // Requisito: realizar una operación en un número 
    @Test
     public  void test7 () { 
        Integer num = operation (100, x-> x * x); 
        System.out.println (num); 
        System.out.println (operation ( 200 , y-> y + 200 )); 

    } 

    operación pública Integer (número entero, MyFun my) {
         return my.getValue (num); 
    }

 

Supongo que te gusta

Origin www.cnblogs.com/wangxue1314/p/12756186.html
Recomendado
Clasificación