lambda表达式与函数式接口

Posted 花伤情犹在

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lambda表达式与函数式接口相关的知识,希望对你有一定的参考价值。

函数式接口

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

Lambda 表达式和方法引用(实际上也可认为是Lambda表达式)上。
如定义了一个函数式接口如下:

interface Test
{
    void cnm();//只能有一个抽象方法,如果定义多个抽象方法就不能使用lambda表达式
}

Lambda语法

包含三部分:

  1. 一个括号内用逗号分隔的形式参数,参数是函数式接口里面方法的参数
  2. 一个箭头符号:->
  3. 方法体,可以是表达式和代码块。
(parameters) -> expression 或者 (parameters) -> { statements; }

注意:
(parameters) -> expression 只适合代码语句仅有一行
(parameters) -> {statements; } 适合多行代码语句

通过下面的代码可以看到lambda表达式设计的代码更简洁,而且可读性更好。

函数式接口:

public interface Test {
    void cnm();
}

Test类:

public class Test1 {
    public static void main(String[] args) {
		/*
		 Test就是一个函数式接口:我只写了一个方法cnm()方法。
		 1、因为cnm()方法没有参数,所以   ->前面的()中不需要声明形参
		 2、cnm返回的是void,所以不需要return。
		 3、->后面写的代码其实就是定义在cnm方法内的代码。因为此处代码只有一行,所以{}也可以省略。如果此处多与一行,则无法省略。
		 */

    	//使用匿名内部类实现Test接口的抽象方法
        new Test(){
            @Override
            public void cnm() {
                System.out.println("这个是用匿名内部类实现的方法");
            }
        }.cnm();
        
		//使用lambda表达式实现Test接口的抽象方法
        Test test=()-> System.out.println("这个是用lambda表达式实现的方法");
        test.cnm();
    }
}

输出结果:

这个是用匿名内部类实现的方法
这个是用lambda表达式实现的方法

以上是关于lambda表达式与函数式接口的主要内容,如果未能解决你的问题,请参考以下文章

函数式接口&Lambda表达式——简单应用笔记

函数式接口&Lambda表达式——简单应用笔记

函数式接口&Lambda表达式——简单应用笔记

Java8函数式编程:Lambda表达式类型与常用函数接口

lambda表达式与函数式接口

函数式接口与Stream流