Java8新特性函数式编程 ---- lambda表达式

在java8版本中有三个重要使用的更新内容,其中之一为Lambda表达式的使用,Lambda表达式使用使java具有了函数式编程的规范,它的存在可以简化匿名内部类使用时的代码编写量,利用Lambda表达式是为了避免匿名内部类定义过多无用的操作。

重要内容:Lambda表达式只支持函数式接口,也就是只有一个抽象方法的接口
使用@FunctionalInterface标注接口

java的函数式接口有以下三种:Consumer、Function、Predicate
函数式接口是Java支持函数式编程的基础。

1 使用背景
lamda表达式是java为函数式编程而设计的,要了解其函数式编程,就要先了解java的匿名内部类的。
匿名内部类:在java中,若一个接口中存在一个方法,想要调用该接口的该方法,因为是一个接口,直接使用new是创建不了的,但是可以new了之后重写内部的该方法(如果想调用,就必须这样写),这样new出来的类是没有类名的,只是想接口的方法进行了重写,这就是匿名内部类。
但往往使用匿名内部类的时候,编写的代码量会很长,存在冗余现象,但是对于java的结构而言还必须要这样写,当java支持了lamda之后,就可以最大量的简化这一块的代码。
总结一句话:使用lambda表达式匿名实现接口方法,当创建接口实现匿名类的时候就可以使用lambda表达式

2 语句形式

(参数) ->单行语句;
(参数) ->{
    
    多行语句}(参数) ->表达式;

这里有一个注意的地方,当语句只有一行的是有,是不需要写{ }的。
3 实例
匿名内部类,我们比较常用的地方在线程类Thread,以前我们可能这样写

new Thread(new Runnable() {
    
    
    @Override
    public void run() {
    
    
        System.out.println("线程操作!");
    }
});

现在,使用Lamda表达式,简单写为:

new Thread(()->System.out.println("线程操作!"));

再比如我们常用的集合的forEach遍历,forEach中的参数就是一个函数式接口,使用匿名内部类的方法如下图所示,需要重写accept方法来实现遍历,使用lambda表达式一行代码搞定!
在这里插入图片描述
在这里插入图片描述
上面所说的这些,都是在将lambda表达式可以优化代码,单着远远不是它的作用,当遇到了java8的另一个新特性stream流,使用lambda有多爽才能体现出来!
java8的Stream API入门笔记

猜你喜欢

转载自blog.csdn.net/Wangdiankun/article/details/114895788
今日推荐