龙空技术网

java-Lambda表达式(拉姆达表达式)了解知多少?

瓦下枯草 38

前言:

现时我们对“lambda的表达式”大概比较关切,朋友们都想要分析一些“lambda的表达式”的相关知识。那么小编也在网摘上汇集了一些关于“lambda的表达式””的相关知识,希望各位老铁们能喜欢,姐妹们一起来学习一下吧!

Lambda表达式是什么?

Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。

Lambda表达式,是推动 Java 8 发布的最重要新特性。

使用 Lambda 表达式可以使代码变的更加简洁紧凑。

都说lambda表达式时闭包,那么关闭(包围)的到底是什么?

闭包关闭(包围)的是Lambda表达式中引用的外部变量(即非Lambda表达式本身声明的变量,或者叫自由变量)。

为什么要关闭(包围)?

因为只有关闭(包围)这些外部变量,Lambda表达式才能避免因为外部环境作用域的失效导致外部变量无法正确读取。如果我们不知道外部变量从哪来是什么,Lambda表达式将无法正确执行。关闭(包围)的目的就让Lambda表达式和它所引用的外部变量(或者叫自由变量,来自于上下文,即Lambda所处的执行环境),组成一个完整的封闭的整体。

lambda表达式的重要特征是什么?

可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。

可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。

可选的大括号:如果主体包含了一个语句,就不需要使用大括号。

可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。

如何手写一个Lambda表达式?

public interface MathOperation {

Long operation(Long a, Long b);

}

public class MyLambda {

public static void main(String[] args) {

MathOperation addOpt = (a, b) -> a + b;

MathOperation subOpt = (a, b) -> a - b;

Long c = 1l;

// 可以使用,外部参数

MathOperation outOpt = (a, b) -> a - b + c;

MyLambda myLambda = new MyLambda();

Long result = myLambda.operation(1000l, 2000l, addOpt);

System.out.println("结果是:" + result);

result = myLambda.operation(1000l, 2000l, subOpt);

System.out.println("结果是:" + result);

result = myLambda.operation(1000l, 2000l, outOpt);

System.out.println("结果是:" + result);

}

public Long operation(Long a, Long b, MathOperation operation) {

return operation.operation(a, b );

}

}

执行结果:

结果是:3000

结果是:-1000

结果是:-999

举出一例Lambda表达式常见的使用?

List集合排序

List<BaseDic> list = new ArrayList<>();

for (int i = 0; i < 20; i++) {

BaseDic obj = new BaseDic();

obj.setCode("" + i);

obj.setValue("value" + i);

list.add(obj);

}

list.sort(new Comparator<BaseDic>() {

public int compare(BaseDic o1, BaseDic o2) {

Integer i1 = Integer.parseInt((String) o1.getCode());

Integer i2 = Integer.parseInt((String) o2.getCode());

return i2.compareTo(i1);

}

});

提取集合对象某个属性,为新的集合

List<String> result = dataList.stream()

.map(Student::getName)

.collect(Collectors.toList());

标签: #lambda的表达式