Lambda表达式

简介: Lambda表达式

一、Lambda表达式简介

什么是Lambda?

     Lambda是JAVA 8 添加的一个新特性。说白了,Lambda就是匿名函数。

为什么要用Lambda?

     使用Lambda表达式可以对一个接口方法进行非常简洁的实现

Lambda对接口的要求?

     虽然可以使用Lambda某些接口进行简单的实现,并不是所有接口都可以用Lambda表达式来实现。要求接口中定义的必须要实现的抽象方法只能是一个。

备注:在JAVA8对接口加了一个新特性:default

 

@FunctionInterface

修饰函数式接口的。接口中的抽象方法只能有一个。

举个栗子(例子)


package com.zhangshangbiancheng;
public class Program {
    public static void main(String[] args) {
        //1、接口实现类
        Comparator comparator = new MyComparator();
        //2、使用匿名内部类
        Comparator comparator1 = new Comparator() {
            @Override
            public int compare(int a, int b) {
                return a - b;
            }
        };
        //3、使用Lambda表达式实现接口
        Comparator comparator2 = (a, b) -> a - b;
    }
}
class MyComparator implements Comparator {
    @Override
    public int compare(int a, int b) {
        return a - b;
    }
}
@FunctionalInterface
interface Comparator {
    int compare(int a, int b);
}


4c4209cc18b98e0ea0c8de992b79f777.jpg

二、Lambda表达式基础语法

   首先我们先创建六个接口,每个接口有一个方法,分别是无参无返回值、有一个参数无返回值、无返回值有多个参数、有返回值无参数、有返回值有一个参数、有返回值多个参数。


package com.zhangshangbiancheng.interfaces;
@FunctionalInterface
public interface LambdadSingleReturnMutipleParameter {
    int test(int a,int b);
}


package com.zhangshangbiancheng.interfaces;
@FunctionalInterface
public interface LambdaNoneReaturnNoneParameter {
    void test();
}


package com.zhangshangbiancheng.interfaces;
@FunctionalInterface
public interface LambdaNoneReturnMutipleParameter {
    void test(int a,int b);
}


package com.zhangshangbiancheng.interfaces;
@FunctionalInterface
public interface LambdaNoneReturnSingleParameter {
    void test(int a);
}


package com.zhangshangbiancheng.interfaces;
@FunctionalInterface
public interface LambdaSingleReturnNoneParameter {
    int test();
}


package com.zhangshangbiancheng.interfaces;
@FunctionalInterface
public interface LambdaSingleReturnSingleParameter{
    int test(int a);
}

拿栗子知Lambda基本语法

package com.zhangshangbiancheng.syntax;
import com.zhangshangbiancheng.interfaces.*;
public class Syntax1 {
    public static void main(String[] args) {
        //1、Lambda表达式的基本语法     基本语法有关
        //Lambda是一个匿名函数
        //返回值类型  参数列表  方法体
        //():用来描述参数列表  *
        //{}:用来描述方法体    *
        //->:Lambda运算符    读作goes to     *
        //无参返回
        LambdaNoneReaturnNoneParameter lambda1 = () ->{
            System.out.println("掌上编程");
        };
        lambda1.test();
        //无返回值、单个参数
        LambdaNoneReturnSingleParameter lambda2 = (int a) ->{
          System.out.println(a);
        };
        lambda2.test(2);
        //无返回值、多个参数
        LambdaNoneReturnMutipleParameter lambda3 = (int a,int b)->{
          System.out.println( a + b );
        };
        lambda3.test(3,1);
        //有返回值、无参数
        LambdaSingleReturnNoneParameter lambda4 = () -> {
            System.out.println("lambda4");
            return 100;
        };
        lambda4.test();
        //有返回值、单个参数
        LambdaSingleReturnSingleParameter lambda5 = (int a) -> {
            return a;
        };
        lambda5.test(2);
        //有返回值、多个参数
        LambdadSingleReturnMutipleParameter lambda6 = (int a,int b) ->{
            return a+b;
        };
        lambda6.test(1,1);
    }
}


这么下来感觉也没怎么节省代码,接下来我们就进一步优化Lambda表达式。

d858045fa46966c32c7ae3c77b0c01c0.png

三、Lambdad表达式语法精简

  接下来我们对上面main函数的Lambda表达的是进行优化,优化如下(上代码):

package com.zhangshangbiancheng.data;
public class Person {    public String name;    public int age;
    public Person(String name, int age) {        this.name = name;        this.age = age;        System.out.println("有参");    }
    public Person() {        System.out.println("无参");    }}

创建Syntax4:

package com.zhangshangbiancheng.syntax;
import com.zhangshangbiancheng.data.Person;
public class Syntax4 {
    public static void main(String[] args) {
        PersonCreater creater = () ->{
          return new Person();
        };
        //上面代码优化如下
        PersonCreater creater = () ->new Person();
         //构造方法的引用   运行效果见下图
        PersonCreater creater1 = Person::new;
        Person a = creater1.getPerson();
    }
}
// 需求:
interface PersonCreater{
    Person getPerson();
}

984322638fdbd93191998471105f4629.png

调用有参创建接口


interface PersonCreater2{
    Person getPerson(String name,int age);
}

实现:


 PersonCreater2 creater2 = Person::new;
 Person b = creater2.getPerson("掌上编程",21);


5e449bc8d253a8ad3019e92b67337f07.png

    以上就是最简单的Lambda应用,若还不熟悉请继续看,记住基础很重要,后期更新Lambda综合案例。

目录
相关文章
|
12月前
|
编译器
C++11 lambda表达式(上)
C++11 lambda表达式
60 0
|
4月前
|
算法 编译器 C++
C++一分钟之—Lambda表达式初探
【6月更文挑战第22天】C++的Lambda表达式是匿名函数的快捷方式,增强函数式编程能力。基本语法:`[capture](params) -> ret_type { body }`。例如,简单的加法lambda:`[](int a, int b) { return a + b; }`。Lambda可用于捕获外部变量(值/引用),作为函数参数,如在`std::sort`中定制比较。注意点包括正确使用捕获列表、`mutable`关键字和返回类型推导。通过实践和理解这些概念,可以写出更简洁高效的C++代码。
46 13
|
5月前
|
Java 编译器
Lambda表达式
Lambda表达式
27 0
|
5月前
|
Java
lambda表达式详解
lambda表达式详解
lambda表达式
lambda表达式是C++11引入的一种简洁的函数定义的方法。lambda表达式具有间接的语法和灵活的使用方式,让代码更加简洁和易读。特别是与function结合起来使得代码的编写更加灵活。本文将简单介绍lambda表达式的相关用法。
|
5月前
|
编译器 C++
C++lambda表达式
C++lambda表达式
|
12月前
|
算法 编译器
C++11 lambda表达式(下)
C++11 lambda表达式(下)
83 2
|
算法 编译器 C语言
【C++11】lambda表达式
目录 lambda表达式 1.1 lambda表达式出现的原因 1.2 lambda表达式语法 1.3 函数对象与lambda表达式
122 0
|
编译器
Lambda表达式引发的思考
Lambda表达式引发的思考
96 0
|
编译器 C#
C#——Lambda表达式
C#——Lambda表达式
95 0