lambda表达式介绍 —- 函数式编程

导读:本篇文章讲解 lambda表达式介绍 —- 函数式编程,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

1. lambda表达式的概念:

2.函数式接口   —-   基础概念

2.1.函数式接口案例示范

3.lambda表达式

3.1.lambda表达式案例示范

        3.1.1.无参无返回值

        3.1.2.无参有返回值

        3.1.3.有返回值无参

         3.1.4.有返回值有参数

        3.1.5.多个参数有返回值

        3.1.6.方法实现:

 3.2.lambda表达式的精简

        3.2.1.参数部分的精简

        3.2.3方法体的精简:


1. lambda表达式的概念:

         lambda表达式是Java8的一个新特性,可以简化我们的代码编程;

        从本质上来说,lambda表达式是一个匿名函数,使用它能简化我们对接口代码的实现;

2.函数式接口   —-   基础概念

        1.一个接口中,要求实现类必须实现的抽象方法,有且只有一个,这样的接口就是函数式接口

       2.这里的有且只有一个的抽象函数的方法不包括toString方法,static修饰的静态方法以及default修饰的方法

2.1.函数式接口案例示范

@FunctionalInterface
interface Test{
    void test();
    static void test1(){};
    default void test2(){};
    String toString();
}

上面这个接口示范虽然有很多方法,但是这是一个函数式接口,原因如下    

        1.toString方法在实现类中实现接口的时候,toString可以不重写!直接能从父类Object中继承到!

        2.static修饰的静态方法有方法体,可以不用实现类实现

        3.default修饰的方法也是有方法体,也是不是必须实现的方法

这里的@FunctionalInterface注解是判断这个接口是不是函数式接口

lambda表达式介绍 ---- 函数式编程

 如果是函数式接口没有任何问题,如果不是函数式接口这个注解就会有红线下划线进行提示。其功能类似与@Override

3.lambda表达式

        1.因为lambda表达式本质上来说是一个匿名函数,所以我们在写lambda表达式的时候不用关系方法名是什么,也不用关心返回值是什么,我们只需要关心:参数和方法体;

        2.lambda表达式的基础语法:

(参数) -> {

方法体

        3.参数部分:方法的参数部分,要求和实现的接口中的方法参数部分一致,包括参数的数量和类型。

        4.方法体部分:方法的实现部分,如果在接口中定义的方法有返回值,则在实现的时候,注意返回值的返回

3.1.lambda表达式案例示范

        3.1.1.无参无返回值

public interface Demo {

    void demo();

}

        3.1.2.无参有返回值

public interface Demo2 {

    void demo(int a);
}

        3.1.3.有返回值无参

public interface Demo3 {

    int demo3();
}

         3.1.4.有返回值有参数

public interface Demo4 {

    int demo4(int a);
}

        3.1.5.多个参数有返回值

public interface Demo5 {

    int demo5(int a,int b);
}

        3.1.6.方法实现:

public class Main {
    public static void main(String[] args) {

        //demo 无参无返回值
        Demo demo = () -> {
            System.out.println("无参无返回值的接口");
        };
        demo.demo();

        //无参有返回值
        Demo2 demo2 = (int a) -> {
            System.out.println("有参无返回值的接口" + a);
        };
        demo2.demo(10);

        //有返回值无参
        Demo3 demo3 = () -> {
            System.out.println("无参有返回值的接口");
            return 10;
        };
        int i = demo3.demo3();
        System.out.println(i);

        //有返回值有参数
        Demo4 demo4 = (int a) -> {
            System.out.println("有返回值有参数的接口" + a);
            return a;

        };
        int i1 = demo4.demo4(20);
        System.out.println(i1);

        //多个参数有返回值
        Demo5 demo5 = (int a, int b) -> {
            int c = a + b;
            System.out.println("多个参数有返回值的接口:a+b=" + c);
            return c;
        };
        int i2 = demo5.demo5(10, 20);
        System.out.println(i2);

    }
}

 3.2.lambda表达式的精简

        3.2.1.参数部分的精简

               参数的类型可以省略,注意:如果要省略就全部省略,如果不省略就全部不要省略,不用一个省略一个不省略;

public class Test01 {
    public static void main(String[] args) {
        Demo5 demo5 = (a,c) ->{
            if (a>c){
                return a-c;
            }else if (a<c){
                return c-a;
            }else {
                return a+c;
            }
        };
        int i = demo5.demo5(10, 10);
        System.out.println(i);
    }
}

                如果只有一个参数的情况下可以把小括号去掉,但是如果没有参数不能省略小括号

      Demo4 demo4 = a ->{
            return a;
        };
        demo4.demo4(10);
    }

        3.2.3方法体的精简:

                方法体的大括号的省略:如果方法体中有且只有一条语句,可以省略大括号。

   Demo demo = () ->
                System.out.println("可以省略大括号");
        demo.demo();

                如果方法体中有且只有一条语句,但是如果这条语句是return返回语句,那么return关键字也可以不用写

Demo4 demo4 = a -> a;

              

                 

                

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/105068.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!