Introducción a la Programación Funcional expresión -Lambda

Como lenguaje de programación Java orientado a objetos, si se programan de acuerdo con el tipo de comandos de programación dividida (programación imperativa). paradigma de programación lógica común, así como la programación (programación lógica), la programación funcional (programación funcional).

En función de la programación de un paradigma de programación, en el campo científico, una estructura de datos y elementos de programación informática realización, el proceso de cálculo, ya que es una evaluación de la función matemática, y cambiar el estado para evitar los datos variables.

¿Cuál es la programación funcional? La respuesta es simple: Todo es una función matemática. lenguajes de programación funcionales pueden tener objetos, pero estos objetos suelen ser constantes - ya sea parámetros de la función, el valor de retorno de la función a lo que es. No existe lenguaje de programación funcional para / siguiente bucle, porque la lógica de los medios que hay un cambio de estado. Como alternativa, la fase, este lenguaje de programación funcional lógica ciclo es recursiva, la función como un modo de paso de parámetros de aplicación.

lambda  expresiones

Java 8 cambio más importante es la introducción de la lambda (lambda es la letra griega λ nombre Inglés) expresión - un comportamiento de transferencia de manera compacta.

Las expresiones lambda de la forma

La sintaxis de una lista de parámetros expresión lambda, flecha -> y una función de la composición corporal. El cuerpo puede ser una expresión de función, o puede ser un bloque de instrucciones.

Expresión: la expresión se ejecutará a continuación, devuelve los resultados.

Un bloque de declaraciones: Declaración sentencia del bloque se ejecutará en secuencia, como una declaración de método.

La persona que llama devolver el control a la declaración de un método anónimo. romper y continuar sólo se puede utilizar en un bucle.

Si el cuerpo de la función tiene un valor de retorno, la función de cada ruta en el interior del cuerpo debe devolver el valor.

cuerpo de la función para las pequeñas expresiones lambda, se elimina la palabra clave de retorno, por lo que la sintaxis más concisa. Éstos son algunos expresión lambda:

(Int x, int y) -> x + y () -> 42

(String s) -> {System.out.println (s); }

Recepción de una primera expresión lambda X e Y ambos parámetros de conformación y devuelve su suma; expresión lambda no recibe el segundo parámetro devuelve el entero '42'; tercera expresión lambda es una cadena y se impresa en la consola, no devuelve un valor.

Las aplicaciones más comunes

clases internas anónimas alternativos

No hay duda, la mayoría de las expresiones lambda aplicaciones utilizadas es una clase interna anónima alternativa, poner en práctica Ejecutable es un ejemplo clásico de una clase interna anónima. expresión de la función lambda es bastante fuerte, con () -> se puede reemplazar toda la clase interna anónima! Mira el código:

Si utiliza una clase interna anónima:

@Test
public void oldRunable() {
new Thread(new Runnable() { @Override
public void run() {
System.out.println("The old runable now is using!");
}
}).start();
}

Y si se utiliza una expresión lambda:

@Test
public void runable() {
new Thread(() ‐> System.out.println("It's a lambda function!")).start();
}

El resultado final:

The old runable now is using!
 It's a lambda function!

no es lo suficientemente fuerte como para terrible? No se trata simplemente de terrible? No está claro y enfocado a terrible? es

expresiones lambda bogeyman, con la finalización de código mínima antes de una cosa a la clase hacen!

La colección utilizando expresiones lambda iterar

clases de colección de Java desarrollo diario se usa con frecuencia, incluso se dice ningún código de Java no se utiliza para la clase de colección. . . La operación más común es la de colecciones iterar atravesados. Ver la comparación:

@Test
public void iterTest() {
List<String> languages = Arrays.asList("java","scala","python");
//before java8
for(String each:languages) { System.out.println(each);
}
//after java8
languages.forEach(x ‐> System.out.println(x)); languages.forEach(System.out::println);
}

Si usted es alumnos Scala familiares, sin duda no es ajeno a forEach. Se puede recorrer todos los objetos de la colección, y

expresión lambda en ella.

languages.forEach(System.out::println);

Esta línea se ve un poco como C ++ resolución de alcance dentro de redacción aquí también es posible.

Mapa de realización con las expresiones lambda

La mención de la programación funcional, una referencia a las expresiones lambda, no podemos dejar de mencionar el mapa. Sí, sin duda java8 apoyo. Ver Ejemplo de código:

@Test
public void mapTest() {
List<Double> cost = Arrays.asList(10.0, 20.0,30.0); cost.stream().map(x ‐> x + x*0.05).forEach(x ‐>
System.out.println(x));
}

El resultado final:

10.5
21.0
31.5

función de mapa se puede decir que la programación funcional más importante es un camino a seguir. Acción es mapear un objeto se convierte en otro. En nuestro ejemplo, el método de mapa costo es a través de un aumento de 0,05 veces en tamaño y de salida.

Con una expresión lambda para conseguir un mapa y reducir

Como se mencionó en el mapa, ¿cómo podemos no menciona reducir. reducir el mapa como uno de los programas más importantes y funcional de varias maneras. mapa de acción es llegar a ser un objeto a otro, y todos los valores a reducir aplicación succionado por una, consulte:

@Test
public void mapReduceTest() {
List<Double> cost = Arrays.asList(10.0, 20.0,30.0);
double allCost = cost.stream().map(x ‐> x+x*0.05).reduce((sum,x)
‐> sum + x).get();
System.out.println(allCost);
}

El resultado final es:

63.0

Si hacemos esto con un bucle for:

@Test
public void sumTest() {
List<Double> cost = Arrays.asList(10.0, 20.0,30.0); double sum = 0;
for(double each:cost) { each += each * 0.05; sum += each;
}
System.out.println(sum);
}

Creo que la redacción de Mapa + + reducir expresión lambda es mayor que un nivel.

funcionamiento del filtro

También contamos con un filtro de frecuencia. Cuando a menudo necesitan un conjunto de operaciones, que se separó por filtración de la parte colección original del elemento.

@Test
public void filterTest() {
List<Double> cost = Arrays.asList(10.0, 20.0,30.0,40.0); List<Double> filteredCost = cost.stream().filter(x ‐> x >
25.0).collect(Collectors.toList()); filteredCost.forEach(x ‐> System.out.println(x));
}

El resultado final:

30.0
40.0
Publicado 682 artículos originales · ganado elogios 1391 · Vistas 1.71 millones +

Supongo que te gusta

Origin blog.csdn.net/itcast_cn/article/details/104773758
Recomendado
Clasificación