Lambda_01 lambda expression 基础语法|8月更文挑战

210 阅读2分钟

这是我参与8月更文挑战的第16天,活动详情查看:8月更文挑战

​​Lambda函数

Java实现匿名函数

  • 创建内部接口 LambdaInterface01
  • 实现接口LambdaInterface01的方法fun()
  • 调用方法

Lambda和Java实现匿名函数的区别

  • ==new LambdaInterface01() ==直接简化为==()==
  • ==方法名public void fun()== 简化为 ==->==

代码示例

package com.lingyiwin;

/**
 * @author lingyiwin
 * @version 1.0
 * @date 2020/10/21 22:24
 */
public class Lambda01 {

    public static void main(String[] args) {
        /**
         * Java 匿名类的实现方式
         */
        LambdaInterface01 lambdaInterface01_java = new LambdaInterface01() {
            @Override
            public void fun() {
                System.out.println("Java 匿名类的实现方式 lambdaInterface01_java");
            }
        };
        //函数调用
        lambdaInterface01_java.fun();

        /**
         * Lambda 函数表达式的实现方式
         */
        LambdaInterface01 lambdaInterface01_lambda = ()->{
            System.out.println("Lambda 函数表达式的实现方式 lambdaInterface01_lambda");
        };
        lambdaInterface01_lambda.fun();
    }
}

/**
 * 内部接口
 * 接口内部只有一个方法,称为函数式接口
 */
interface LambdaInterface01{
    public void fun();
}

如果大括号中{ ==只有一行代码==}可以直接将代码写在箭头后面。

public class Lambda02 {
    public static void main(String[] args) {
        Runnable runnable_java = new Runnable() {
            @Override
            public void run() {
                System.out.println("Java");
            }
        };
        runnable_java.run();

        Runnable runnable_lambda01 = () -> {
            System.out.println("Lambda01");
        };
        runnable_lambda01.run();
        //如果{只有一行带吗}可以简写为如下:
        Runnable runnable_lambda02 = () -> System.out.println("Lambda02");
        runnable_lambda02.run();
    }
}

Lambda表达式是JAVA8中提供的一种新的特性,它支持JAVA也能进行简单的“函数式编程”。 

它是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。

函数式接口:Functional Interface. 有且只有一个抽象方法 ,这样的接口就成为函数式接口。 JAVA8的接口可以有多个default方法)

任何函数式接口都可以使用lambda表达式替换。 

lambda表达式只能出现在目标类型为函数式接口的上下文中。

Java SE 8中增加了一个新的包:java.util.function,它里面包含了常用的函数式接口,例如:

Predicate<T>  接收T对象 返回boolean
Consumer<T>  接收T对象 不返回
Function<T,R>  接收T对象 返回对象
Supplier<T> 提供T对象 不接收值 
unaryOperator<T> 接收T对象 返回T对象
BinaryOperator<T> 接收两个T对象 返回T对象