欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java8的Lambda表达式你了解吗?80%的都不知道

程序员文章站 2022-06-24 09:42:51
​ 五一5天假,说没就没,但是学习的脚本不能停下。 收假了,我们还是要继续搬砖,学习也不能携带。 给大家带来一套Java8的秘籍。 Lambda 表达式是什么 Lambda 表达式(lambda expression)是一个匿名函数,由数学中的 λ 演算而得名。 在 Java 8 中可以把 Lamb ......

 

Java8的Lambda表达式你了解吗?80%的都不知道

五一5天假,说没就没,但是学习的脚本不能停下。

收假了,我们还是要继续搬砖,学习也不能携带。

给大家带来一套java8的秘籍。

lambda 表达式是什么

lambda 表达式(lambda expression)是一个匿名函数,由数学中的 λ 演算而得名。 在 java 8 中可以把 lambda 表达式理解为匿名函数,它没有名称,但是有参数列表、函数主体、返回类型等。
这里还要注意光理论是不够的,记住:java架构项目经验永远是核心,如果你没有最新java架构实战教程及大厂30k+面试宝典,可以去小编的java架构学习.裙 :七吧伞吧零而衣零伞 (数字的谐音)转换下可以找到了,里面很多新java架构项目教程,还可以跟老司机交流讨教! 

lambda 表达式的语法如下:

(parameters) -> { statements; }

为什么要使用 lambda 表达式? 前面你也看到了,在 java 中使用内部类显得十分冗长,要编写很多样板代码,lambda 表达式正是为了简化这些步骤出现的,它使代码变得清晰易懂。

如何使用 lambda 表达式

lambda 表达式是为了简化内部类的,你可以把它当成是内部类的一种简写方式,只要是有内部类的代码块,都可以转化成 lambda 表达式:

// comparator排序

list<integer> list = arrays.aslist(3, 1, 4, 5, 2);
list.sort(new comparator<integer>() {
    @override
    public int compare(integer o1, integer o2) {
        return o1.compareto(o2);
    }
});

// 使用lambda表达式简化
list.sort((o1, o2) -> o1.compareto(o2));
复制代码
// runnable代码块

thread thread = new thread(new runnable() {
    @override
    public void run() {
        system.out.println("hello man!");
    }
});

// 使用lambda表达式简化
thread thread = new thread(() -> system.out.println("hello man!"));
复制代码

可以看出,只要是内部类的代码块,就可以使用 lambda 表达式简化,并且简化后的代码清晰易懂。

方法引用

甚至,comparator 排序的 lambda 表达式还可以进一步简化:

list.sort(integer::compareto);

这种写法被称为 「方法引用」,方法引用是 lambda 表达式的简便写法。 如果你的 lambda 表达式只是调用这个方法,最好使用名称调用,而不是描述如何调用,这样可以提高代码的可读性。

方法引用使用 ::分隔符,分隔符的前半部分表示引用类型,后面半部分表示引用的方法名称。 例如: integer::compareto表示引用类型为 integer,引用名称为 compareto的方法。

对于 lambda 表达式到方法引用的简化,我们提供以下规则:

lambda 表达式 方法引用
(args) -> classname.staticmethod(args) classname::staticmethod
(arg0, ...) -> arg0.instancemethod(...) classname::instancemethod
(args) -> expression.instancemethod(args) expression::instancemethod

特别的,对于构造函数的方法引用: classname::new

类似使用方法引用的例子还有打印集合中的元素到控制台中: list.foreach(system.out::println);
最后要注意:光理论是不够的,记住:java架构项目经验永远是核心,如果你没有最新java架构实战教程及大厂30k+面试宝典,可以去小编的java架构学习.裙 :七吧伞吧零而衣零伞 (数字的谐音)转换下可以找到了,里面很多新java架构项目教程,还可以跟老司机交流讨教!