JAVA8新特性Lambda表达式

经常听到大佬们说java8有几个新特性特别好用,lambda表达式、stream集合等等,抱着好奇心我也去学了学lambda表达式,发现的确是方便了不少,接下来分享一下我的理解吧:
lambda表达式最明显的结构,就是 -> 符号,也称箭头操作符,它可以使方法作为参数一样自由传递,它的好处在于,可以精简许多代码
首先说一下表达式的构成:

->//箭头左边代表的是参数列表,右边是要执行的方法,也称(Lambda体)

接下来是几种基本语法:
语法一:无参数无返回值

(参数)->需要执行的方法

为了更好的表现它的优点,我们以实现runnable接口进行输出语句的方法为例:
传统方法:

@Test
    public void test1(){
        Runnable runnable=new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello world!");
            }
        };
        runnable.run();
    }

我们需要的功能,其实只有输出Hello world这句话,但为了实现这个功能,我们多写下了几行代码,如果使用lambda表达式,就能对其进行优化
优化:

   Runnable runnable1=()-> System.out.println("Hello world!");
        runnable1.run();

箭头左边代表需要传入的参数,这里我们需要的只是输出语句,所以不需要参数,而箭头右边代表的时候我们需要执行的功能,即输出语句,同样的效果使用lambda表达式我们只用了两行代码,大大提高了效率。
语法二:有一个参数无返回值
同样还是输出一句话,不过我们输出的是传入的参数,这里我们使用java8中的consumer接口

@Test
    public void  test2(){
        Consumer<String> con=(x) -> System.out.println(x);
        con.accept("你好");
    }

箭头左边括号中传入了一个名为x的参数,因为左边声明的接口泛型中指定了为string类型,运行时jvm会自动
识别x为string类型(即类型推断),所以可以省略x的数据类型,右边是我们需要执行的功能,打印x。
consumer意为“消费者”,查看源码后不难看出,该接口中需要先调用accept方法,才会对入参进行处理,并不带返回值
另外,当参数只有一个并且没有返回值时,我们可以不用在右边带上括号,直接写参数即可:

@Test
    public void  test2(){
        Consumer<String> con=x -> System.out.println(x);
        con.accept("你好");
    }

语法格式三:有两个以上的参数,并且Lambda体中有多条语句,有返回值,这里我们使用Comparator接口示例:

 @Test
    public void test3(){
        Comparator<Integer> com=(x,y) -> {
            System.out.println("语法格式三");
            return Integer.compare(x,y);
        };
    }

查看接口中的方法,发现有一个返回值为int并且需要两个参数的方法,于是我们将接口的泛型定义为Integer类型,并且执行两条语句
同样的,当lambda体中只有一条语句时,大括号可以省略,甚至连return也可以不写,即:

 public void test3(){
        Comparator<Integer> com=(x,y) -> Integer.compare(x,y);
    }

以上便是几种lambda表达式的基本语法,在举完这些例子之后,我们不难看出,lambda表达式一直在和接口打交道,而以上三个例子中的接口,都有一个共同的特点,就是接口中都只含有一个抽象方法,在java8中,对这样的接口引入了一个新的概念,叫做函数式接口,并且出现了一个新的注解@@FunctionalInterface,其中文意思便是函数式接口,该注解用于检测接口是否为函数式接口,而lambda表达式只能适用于函数式接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值