Java的Lambda表达式详解(参考On Java8)

Posted 一只特立独行的猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java的Lambda表达式详解(参考On Java8)相关的知识,希望对你有一定的参考价值。


编程是美的,在处理复杂程序时,往往是考虑一个程序员优雅写代码的能力,虽然都能实现同一个功能,但是有经验的程序猿往往能写出易于维护,易于理解,更加优雅的的程序。
在使用Java的过程中,经常会用到一些东西,但是又没有必要专门为这个东西创建一个类或者函数,或者这个东西只用到一次,不需要专门去定义。 这时候出现了匿名类和匿名函数,使得代码更为优雅。 匿名类这里不做讨论,现在讨论的是匿名函数,即Lambda表达式。

实际意义:

通过直接使用接口来产生一个函数,省略中间创建类作为中转的情况。

基本格式

格式1:

(interface) a = (参数)->表达式

格式2:

(interface) a =(参数)->{表达式;}

注意点:
1.格式1只能有一个语句,默认该语句的结果作为返回值,不能存在return;格式2可以有多个返回值,必须存在return。

3.虽然Lambda 表达式产生函数,但是实际上在 JVM中,一切都是一个类,JVM会自动产生类进行中转,但是代码看起来就比较简洁。

用法说明

Lambda用于:
在这里插入图片描述
接口只有一个函数,但是为了使用该函数,不得通过类来实例化该接口(如红色线条所示)。但是为了简化代码,实际上没有必要实例化Add类,可以通过接口直接使用该函数,这就是Lambda函数的由来(图中黑色箭头所示)。
用法1:
需要在当前类使用addable的函数。

package Test;

//申明一个接口,接口只有一个函数申明
interface addable{
    int add(int a, int b);
}

public class Main{
    public static void main(String[] args) {
        //用Lambda定义函数体,默认定义add方法
        addable addTest = (a,b) -> a+b ;
        //调用该接口的add方法
        System.out.println(addTest.add(1,2));
    }
}

用法2:
向函数中传入匿名函数作为参数

package Test;

interface addable{
    int add(int a, int b);
}

public class Main{
    public static void main(String[] args) {
        //传入匿名Lambda函数
        int sum = addTest((a,b)->a+b);
        System.out.println(sum);
    }
    public static int addTest(addable addTest){
        //相当于C++的函数指针,可以直接通过该接口调用add方法
        return addTest.add(1,2);
    }
}

总结:

总的来说,就是采用lambda来在代码层面跳过实例类,直接实例化函数,来增加代码的可读性和优雅性(实际上JVM还是创建了类)。

以上是关于Java的Lambda表达式详解(参考On Java8)的主要内容,如果未能解决你的问题,请参考以下文章

java lambda表达式速度快吗

java中的lambda表达式是啥?

java中lambda表达式怎样实现一个多方法的接口呢

JAVA8之lambda表达式详解

java lambda

JAVA8之lambda表达式详解,及stream中的lambda使用