Uso de expresiones Lambda
Las expresiones lambda son una nueva característica de JDK8, que puede reemplazar la mayoría de las clases internas anónimas y escribir código Java más elegante, especialmente en el recorrido de colecciones y otras operaciones de colección, que pueden optimizar en gran medida la estructura del código.
Nuevas funciones de Lambda:
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
Características importantes de Lambda:
- Declaración de tipo opcional : no es necesario declarar el tipo de parámetro, el compilador puede identificar uniformemente el valor del parámetro.
- Paréntesis de parámetros opcionales : un parámetro no necesita definir paréntesis, pero varios parámetros deben definir paréntesis.
- Llaves opcionales : si el cuerpo contiene una declaración, no se requieren llaves.
- Palabra clave de retorno opcional : si el sujeto solo tiene un valor de retorno de expresión, el compilador devolverá automáticamente el valor. Las llaves deben especificar que la expresión devuelve un valor.
Sintaxis básica de Lambda
/**多个参数有返回值*/
@FunctionalInterface
public interface ReturnMultiParam {
int method(int a, int b);
}
@FunctionalInterface
Reparar la interfaz de función decorativa , que requiere una interfaz abstracta es solo un método . Esta anotación a menudo aparece con expresiones lambda.
La forma de sintaxis es () -> {}
, donde () se usa para describir la lista de parámetros, {} se usa para describir el cuerpo del método, -> es el operador lambda, pronunciado (va a).
Simplificación de la sintaxis lambda
La llamada al método correspondiente es:
//多个参数有返回值
ReturnMultiParam returnMultiParam = (int a, int b) -> {
System.out.println("ReturnMultiParam param:" + "{" + a + "," + b +"}");
return 1;
};
int res3 = returnMultiParam.method(6, 8);
El método también puede ser más conciso:
1. 只有一个参数可以省略括号 (int a) >> a ,且省略参数类型
2. 如果方法体中只有一个语句,则可以省略括号
ReturnMultiParam returnMultiParam = a ->System.out.println("ReturnMultiParam param:" + a);
3. 如上是省略大括号的 有return值的 表达式
ReturnMultiParam returnMultiParam = a -> 1 + a;
4. //lambda4 引用了已经实现的 addTwo 方法
Exe1 exe = new Exe1();
ReturnOneParam lambda4 = exe::addTwo; // 调用非静态方法
ReturnOneParam lambda5 = Exe1 ::addTwo2; // 调用静态方法
Referencia del método de construcción
interface ItemCreatorParamContruct {
Item getItem(int id, String name, double price);
}
Uso de lambda del método de construcción:
ItemCreatorParamContruct creator3 = Item::new;
Item item3 = creator3.getItem(112, "鼠标", 135.99);
Equivalente a expresiones regulares
ItemCreatorParamContruct creator4 = new ItemCreatorParamContruct() {
@Override
public Item getItem(int id, String name, double price) {
return new Item(id, name, price);
}
};
creator4.getItem(112, "鼠标", 135.99);
Uso de colecciones
- Recorrido de colección
@RequiresApi(api = Build.VERSION_CODES.N)
ArrayList<Integer> list = new ArrayList<>();
//lambda表达式 方法引用
list.forEach(System.out::println);
list.forEach(element -> {
if (element % 2 == 0) {
System.out.println(element);
}
});
- Eliminar elementos de la colección
ArrayList<Item> items = new ArrayList<>();
items.removeIf(ele -> ele.getId() == 7);
- Clasificación de elementos de la colección
ArrayList<Item> list = new ArrayList<>();
list.sort((o1, o2) -> o1.getId() - o2.getId());
Enlace recomendado: