iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java8中如何实现函数式接口
  • 527
分享到

Java8中如何实现函数式接口

2023-06-16 03:06:57 527人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关Java8中如何实现函数式接口,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Lambda表达式小试牛刀Lambada表达式可以理解为:可传递的匿名函数的一种简洁表

这篇文章将为大家详细讲解有关Java8中如何实现函数式接口,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

Lambda表达式小试牛刀

Lambada表达式可以理解为:可传递的匿名函数的一种简洁表达方式。Lambda表达式没有名称,同普通方法一样有参数列表、函数主体、返回类型等;

下面简单看一个例子,new一个线程打印字符串,采用lambda表达式非常简洁:

new Thread(() -> System.out.println("hello java8 lambda")).start()

Thread类接受一个Runnable类型实例,查看jdk源码发现Runnable接口是一个函数式接口,可以直接用lambda表达式替代。

@FunctionalInterface public interface Runnable {     public abstract void run(); }

Lambda表达式语法非常简单:

() -> System.out.println("hello java8 lambda")
  • ()括号里面是参数列表,如果只有一个参数还可以写为:a -> System.out.println(a)

  • -> 箭头为固定写法;

  • System.out.println("hello java8 lambda") 为函数主体,如果有多条语句要用花括号包裹起来, 比如下面这样:

(a, b) -> {int sum = a + b; return sum;}

综上,Lambda表达式模块可以固化为:

(parameter) -> {expression} 或者 (parameter) -> {statements; statements; }

数只有一个可以省略括号

如果不用Lambda表达式,使用匿名内部类的方式,写法就不是那么优雅了。

// before Java8 new Thread(new Runnable() {     @Override     public void run() {         System.out.println("hello java8 without lambda");     } }).start();

Lambda高阶用法

(1)函数式接口

函数式接口是只定义了一个抽象方法的接口。注意Java8中允许存在默认方法(default),哪怕有很多默认方法,只要有且仅有一个抽象方法,那么这个接口仍然是函数式接口。

函数式接口通常在类上有一个注解@FunctionalInterface,如:

@FunctionalInterface public interface Runnable {     public abstract void run(); }

(2)函数式接口可以干什么?

通常lambda表达式与函数式接口结合一起用,lambda表达式以内联的形式为函数式接口的抽象方法提供实现,把整个表达式作为函数式接口的实例。在没有lambda表达式之前,我们通常会使用匿名内部类的方式实现,详细对比见第一小节的实例代码。

(3)函数描述符

函数式接口抽象方法的签名基本上就是lambda表达式的签名,我们可以将这种对应关系称为函数描述符。由一个函数式接口的抽象方法抽象为一个函数描述符,这个过程非常重要,知道了函数描述符去写lambda表达式也就非常容易了。举个例子:

Runnable接口有一个抽象方法 void run(), 接受空参数返回void,那么函数描述符可以推导为:

  • () -> void

  • lambda表达式可以写为

  • () -> System.out.println("hello java8 lambda")

(4)常用函数式接口

java8 中常用函数式接口,针对基本类型java还定义了IntPredicate, LongPredicate等类型,详细可以参考jdk源码。

函数式接口函数描述符
PredicateT->boolean
ConsumerT->void
Function<T,R>T->R
Supplier() -> T
UnaryOperatorT -> T
BinaryOperator(T,T)->T
BiPredicate<L,R>(L,R)->boolean
BiConsumer<T,U>(T,U)->void
BiFunction<T,U,R>(T,U)->R

至于 Predicate, Consumer, Function这些函数式接口具体作用,在后面的文章中会详细介绍,这里只需有个大体印象即可。

(5)将lambda表达式重构为方法引用

方法引用可以看作是lambda表达式的一种快捷写法,它可以调用特性的方法作为参数传递。你也可以将方法引用看作是lambda表达式的语法糖,让lambda表达式写起来更加简介。举个栗子,按学生年龄排序

// before students.sort((s1, s2) -> s1.getAge.compareTo(s2.getAge())))); // after 使用方法引用 students.sort(Comparator.comparing(Student::getAge()))));

方法引用主要有三类:

  • 静态方法的方法引用

valueOf是String类的静态方法,方法引用写为 String::valueOf, 对应lambda表达式:a ->  String.valueOf(a)

  • 任意类型实例方法的方法引用

length是String类的实例方法,方法引用写为 String::length,对应lambda表达式:(str) ->  str.length()

  • 现有对象的实例方法的方法引用

第三种容易与第二种混淆,现有对象指的是在lambda表达式中调用外部对象(不是入参对象)的实例方法,比如:

String str = "hello java8"; () -> str.length();

对应方法引用写为 str::length, 注意不是 String::length

最后我们将三类方法引用归纳如下:

lambda表达式方法引用 
(args) -> ClassName.staticMethod(args)ClassName::staticMethod静态方法方法引用
(arg0, params) -> arg0.instanceMethod(params)ClassName::instanceMethod内部实例方法引用
arg0
(params) -> arg0.instanceMethod(params)
arg0.instanceMethod外部实例方法引用

关于Java8中如何实现函数式接口就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: Java8中如何实现函数式接口

本文链接: https://www.lsjlt.com/news/282143.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java8中如何实现函数式接口
    这篇文章将为大家详细讲解有关Java8中如何实现函数式接口,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Lambda表达式小试牛刀Lambada表达式可以理解为:可传递的匿名函数的一种简洁表...
    99+
    2023-06-16
  • Java8中怎么实现一个函数式接口
    这篇文章给大家介绍Java8中怎么实现一个函数式接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。以下我们继续深入Java8函数式编程模型public class Test1 { ...
    99+
    2023-05-30
    java8
  • Java8中怎么利用Stream实现函数式接口
    这期内容当中小编将会给大家带来有关Java8中怎么利用Stream实现函数式接口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。函数式接口什么是函数式接口?简单来说就是只有一个抽象函数的接口。为了使得函数式...
    99+
    2023-06-16
  • Java8函数式接口java.util.function速查大全
    前言 Java 8中有很多新实用的特性,其中就有函数式接口.相信很多小伙伴都是第一次听到这个名词,下面进行函数式接口相关知识的学习。 函数式接口概念 函数式接口(Function...
    99+
    2024-04-02
  • Java8中函数式接口与Lambda表达式的特性
    今天就跟大家聊聊有关Java8中函数式接口与Lambda表达式的特性,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是Lambda表达式,java8为什么使用Lambda表达式?“...
    99+
    2023-05-31
    java8 函数式接口 lambda
  • 怎么对Java8中的函数式接口进行测试
    怎么对Java8中的函数式接口进行测试?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 函数式接口的理解根据重构的思想,需要把容易变化的模块进行抽象并封装起来,从这个点来...
    99+
    2023-05-31
    java8 函数式接口 ava
  • Java8中需要知道的函数式接口有哪些
    这篇“Java8中需要知道的函数式接口有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java8中需要知道的函数式接口有...
    99+
    2023-07-05
  • Java8中Lambda表达式与函数式接口的示例分析
    这篇文章将为大家详细讲解有关Java8中Lambda表达式与函数式接口的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java8被称作Java史上变化最大的一个版本。其中包含很多重要的新特性,最核...
    99+
    2023-05-30
    java lambda
  • Java8函数式接口的基础学习教程
    函数式接口 1.1 函数式接口概述 函数式接口:有且仅有一个抽象方法的接口 Java中的函数式编程体现就是Lambda表达式,所以函数式接口就是可以使用与Lambda使用的接口 只...
    99+
    2024-04-02
  • Java8函数式接口java.util.function速查的示例分析
    这篇文章给大家分享的是有关Java8函数式接口java.util.function速查的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。函数式接口概念函数式接口(Functional Interface)就...
    99+
    2023-06-20
  • lambda表达式与传统接口函数如何实现
    这篇文章主要讲解了“lambda表达式与传统接口函数如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“lambda表达式与传统接口函数如何实现”吧!一、接口定义首先,我们要明白lambd...
    99+
    2023-06-29
  • 4个Java8中你需要知道的函数式接口分享
    目录前言为什么需要知道这几个函数式接口Function 接口说明apply 方法andThen 和 compose 方法identify 方法Consumer 接口说明accept ...
    99+
    2023-05-14
    Java8函数式接口 Java 函数式接口 Java8 接口
  • 如何使用java函数式接口
    这篇文章主要介绍了如何使用java函数式接口,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、函数式接口的由来我们知道使用Lambda表达式的前提是需要有函数式接口,而Lam...
    99+
    2023-06-15
  • golang 函数实现接口
    Golang是近年来备受关注的编程语言,其强大的并发能力和高效的运行速度受到了众多开发者的青睐。在Golang中,接口是一个十分重要的概念,它能够帮助我们实现代码的解耦和灵活性。本文将介绍如何使用函数实现接口。一、Golang接口在Gola...
    99+
    2023-05-14
  • 怎么在Java8项目中实现一个函数式编程
    这期内容当中小编将会给大家带来有关怎么在Java8项目中实现一个函数式编程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。函数式的思考命令式编程一般我们实现一个系统有两种思考方式,一种专注于如何实现,比如下...
    99+
    2023-05-31
    java8 函数式编程 ava
  • java中什么是函数式接口
    这篇文章给大家介绍java中什么是函数式接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮点类型,用来表示小数的数据类型...
    99+
    2023-06-14
  • 详解Java 中的函数式接口
    目录@FunctionalInterface注解最简单的函数式接口基础数据类型的函数表达式二元输入参数的函数Two-ArityFunctionSpecializationsSuppl...
    99+
    2024-04-02
  • java中有哪些函数式接口
    java中有哪些函数式接口?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于J...
    99+
    2023-06-14
  • 函数实现接口时的模式名称是什么?
    php小编柚子在这里为大家解答一个常见问题:“函数实现接口时的模式名称是什么?”在PHP中,当一个函数实现了一个接口中的所有方法时,这种模式被称为“接口实现模式”或“接口适配器模式”。...
    99+
    2024-02-09
  • GO语言中接口和接口型函数如何使用
    这篇文章主要讲解了“GO语言中接口和接口型函数如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“GO语言中接口和接口型函数如何使用”吧!// A Getter&nbs...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作