JAVALambda表达式与函数式接口详解

 更新时间:2022年02月13日 09:09:45   作者:锦哥哥(API调用工程师)  
大家好,本篇文章主要讲的是JAVALambda表达式与函数式接口详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

Lambda表达式的诞生是为了解决JAVA创建匿名内部类代码冗余的问题。例子如下:

public class Lambda {
    public static void main(String[] args) {
        Gog gog = new Gog() {
            @Override
            public void say() {
                System.out.println("WOW");
            }
        };
        gog.say();
    }
}

interface Gog {
    void say();
}

这里我们想实现接口的say方法,由于实例化接口会创建匿名内部类,需要将接口中的所有方法实现。为了实现一个简单的方法冗余了许多代码出来。那么如果用Lambda 表达式去简化呢。例子如下:

public class Lambda {
    public static void main(String[] args) {
    	//Lambda表达式的写法即: ()-> {函数实现} 当函数实现只有一行代码时,可以省略大括号 如下所示:
        Gog gog = () -> System.out.println("WOW");
        gog.say();
    }
}

interface Gog {
    void say();
}

只包含一个抽象方法的接口称为函数式接口。而也只有函数式接口可以利用Lambda 表达式进行简化。其实原因很简单。如果接口中有多个方法,Lambda表达式将无法明确调用的是那个函数。
而根据抽象函数的返回值与参数列表,函数式接口可以简单的分为以下4种类型:

在这里插入图片描述

//1.供给型接口:Interface Supplier<T>没有参数,有返回值
interface Supplier {
    String say();
}

//2.消费型接口:Interface Consumer<T>只有输入,没有返回值
interface Consumer{
    void say(String name);
}

//3.断定型接口:Interface Predicate<T>传入参数t,返回值类型为boolean类型
interface Predicate{
    boolean say(String name);
}

//4.函数型接口:Interface Function<T,R>传入参数类型为T,返回值类型为R
interface Function{
    String say(int age);
}

举几个我们身边中常用到的Lambda函数

public class MyThread {

    public static void main(String[] args) {
        new Thread(() -> {
            System.out.println("创建线程");
        }).start();
    }
}

如上代码大家必然很熟悉,一个很简单的创建线程的方法。我们进入Thread对应的构造函数看看。

在这里插入图片描述

可以看到,我们调用的构造函数的入参是Runnable接口,而我们在看看我们创建的时候,明明使用的是Lambda 表达式,那么可以断定,Runnable接口必定是一个函数式接口

在这里插入图片描述

注意!!由于jdk8之后,接口中的函数可以拥有默认实现,这种拥有默认实现的方法,并不会影响这个接口成为函数式接口。例子如下:

public class Lambda {
    public static void main(String[] args) {
        Supplier supplier = ()-> "wow";
        System.out.println(supplier.say());
    }
}

interface Supplier {

    String say();
   
    default String name(){
        return "";
    }
}

Supplier 接口中有两个函数,但是依然可以成为函数式接口,利用Lambda 表达式进行简化。

到此这篇关于JAVALambda表达式与函数式接口详解的文章就介绍到这了,更多相关JAVALambda表达式与函数式接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 去掉 IDEA 中 mybatis配置文件的局部背景颜色(图解)

    去掉 IDEA 中 mybatis配置文件的局部背景颜色(图解)

    这篇文章通过图文并茂的形式给大家介绍了去掉IntelliJ IDEA 中 mybatis配置文件的局部背景颜色及mybatis 对应的 xml 文件警告的方法图解,需要的朋友可以参考下
    2018-09-09
  • 谈谈Java中Volatile关键字的理解

    谈谈Java中Volatile关键字的理解

    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果,本文给大家介绍java中volatile关键字,需要的朋友参考下
    2016-03-03
  • Spring整合Quartz Job以及Spring Task的实现方法

    Spring整合Quartz Job以及Spring Task的实现方法

    下面小编就为大家分享一篇Spring整合Quartz Job以及Spring Task的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Java语言实现扫雷游戏(1)

    Java语言实现扫雷游戏(1)

    这篇文章主要为大家详细介绍了Java语言实现的扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 一文详解Java中的Stream的汇总和分组操作

    一文详解Java中的Stream的汇总和分组操作

    这篇文章主要为大家详细介绍了Java8中的Stream的汇总和分组的操作,文中的示例代码讲解详细,对我们学习Java有一定帮助,需要的可以参考一下
    2022-09-09
  • SonarQube安装、配置与使用教程图解

    SonarQube安装、配置与使用教程图解

    这篇文章主要介绍了SonarQube安装、配置与使用教程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • spring-data-redis自定义实现看门狗机制

    spring-data-redis自定义实现看门狗机制

    redission看门狗机制是解决分布式锁的续约问题,本文主要介绍了spring-data-redis自定义实现看门狗机制,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 基于Java 注解(Annotation)的基本概念详解

    基于Java 注解(Annotation)的基本概念详解

    基于Java 注解(Annotation)的基本概念详解
    2013-04-04
  • shardingjdbc之配置druid数据库连接池过程

    shardingjdbc之配置druid数据库连接池过程

    这篇文章主要介绍了shardingjdbc之配置druid数据库连接池过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • SpringBoot实现过滤器和拦截器的方法

    SpringBoot实现过滤器和拦截器的方法

    大家应该都晓得实现过滤器需要实现 javax.servlet.Filter 接口,而拦截器会在处理指定请求之前和之后进行相关操作,配置拦截器需要两步,本文通过实例代码给大家介绍SpringBoot 过滤器和拦截器的相关知识,感兴趣的朋友一起看看吧
    2022-11-11

最新评论