我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java8中怎么实现一个函数式接口

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java8中怎么实现一个函数式接口

这篇文章给大家介绍Java8中怎么实现一个函数式接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

以下我们继续深入Java8函数式编程模型

public class Test1 {  public static void main(String[] args) {    List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);    list.forEach(new Consumer<Integer>() {      @Override      public void accept(Integer integer) {        System.out.println(integer);      }    });  }}

这段程序很简单,首先初始化一个Integer类型的集合然后向控制台输出每个元素。其中我们注意到forEach方法,它就是Java8中新增加的默认方法。

public interface Iterable<T> {  .  .省略  .  default void forEach(Consumer<? super T> action) {    Objects.requireNonNull(action);    for (T t : this) {      action.accept(t);    }  }}

它被声明在Iterable接口中,并被关键字default修饰。这样任何一个该接口的子类型都可以继承forEach方法的实现,所以List接口因为是Iterable的间接子接口,所以也继承了该默认方法。Java8采用这种巧妙的方式既扩展了接口的功能,又兼容了老版本。

接下来分析下forEach的实现,首先接收了一个Consumer类型的参数action,进行非空判断,然后遍历当前所有元素交由action的accept方法进行处理。那么Consumer又是什么鬼,看源码

@FunctionalInterfacepublic interface Consumer<T> {    void accept(T t);  .  .省略  .}

一个接口,有且仅有一个抽象方法,被@FunctionalInterface修饰,典型的函数式接口。

ok,现在我们知道forEach接收的Consumer类型的参数是一个函数式接口,接口里唯一的accept抽象方法接收一个参数,不返回值。那通过上一篇文章我们知道,创建函数式接口类型的实例其中一种方式是使用Lambda表达式,所以可以将最上面的程序改造一下

public class Test1 {  public static void main(String[] args) {    List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);    //Lambda表达式 接收一个参数 不返回值    list.forEach(item -> System.out.println(item));  }}

该lambda表达式item -> System.out.println(item)接收一个参数 不返回值,符合accept方法签名要求,编译通过。
也就是说如果使用lambda表达式来创建一个函数式接口实例,那这个lambda表达式的入参和返回必须符合这个函数式接口中唯一的抽象方法的方法签名。

接下来再对程序进行改造

public class Test1 {  public static void main(String[] args) {    List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);    //方法引用    list.forEach(System.out::println);  }}

看到out后面有两个冒号,反正当时我是凌乱了。。。这个就是函数式接口实例第二种创建方式:方法引用方法引用的语法是 对象::方法名

同样,使用方法引用方式去创建函数式接口实例也必须遵守方法签名的定义,看下此处println方法源码

public void println(Object x) {  String s = String.valueOf(x);  synchronized (this) {    print(s);    newLine();  }}

接收一个参数,并不返回值,编译通过。

最后我们来看下创建函数式接口的最后一种,第三种方式:构造方法引用 ,继续改程序

public class Test1 {  public static void main(String[] args) {    List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);    //构造方法引用    list.forEach(Test1::new);  }    Test1(Integer i){    System.out.println(i);  }}

构造方法引用的语法是:类名::new

我们给Test1新添加了一个构造方法,该构造方法接收一个参数,不返回值,编译通过。(仅为展示构造方法引用的用法)

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java8中怎么实现一个函数式接口

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

下载Word文档

猜你喜欢

Java8中怎么实现一个函数式接口

这篇文章给大家介绍Java8中怎么实现一个函数式接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。以下我们继续深入Java8函数式编程模型public class Test1 { public static void
2023-05-30

Java8中怎么利用Stream实现函数式接口

这期内容当中小编将会给大家带来有关Java8中怎么利用Stream实现函数式接口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。函数式接口什么是函数式接口?简单来说就是只有一个抽象函数的接口。为了使得函数式
2023-06-16

Java8中如何实现函数式接口

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

怎么在Java8项目中实现一个函数式编程

这期内容当中小编将会给大家带来有关怎么在Java8项目中实现一个函数式编程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。函数式的思考命令式编程一般我们实现一个系统有两种思考方式,一种专注于如何实现,比如下
2023-05-31

怎么对Java8中的函数式接口进行测试

怎么对Java8中的函数式接口进行测试?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 函数式接口的理解根据重构的思想,需要把容易变化的模块进行抽象并封装起来,从这个点来
2023-05-31

4个Java8中你需要知道的函数式接口分享

Java 8 中提供了许多函数式接口,包括Function、Consumer、Supplier、Predicate 等等。本文主要来和大家介绍一下它们的具体使用,需要的可以参考一下
2023-05-14

C++中怎么实现一个接口

C++中怎么实现一个接口,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。定理1:C++接口是依赖的终点。接口不需要依赖任何东西。推论1:依赖C++接口是安全的。不会带来更多的
2023-06-17

Java8中函数式接口与Lambda表达式的特性

今天就跟大家聊聊有关Java8中函数式接口与Lambda表达式的特性,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是Lambda表达式,java8为什么使用Lambda表达式?“
2023-05-31

WCF中怎么实现一个ICommunicationObject接口

本篇文章为大家展示了WCF中怎么实现一个ICommunicationObject接口,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。WCF托管特性ICommunicationObject接口publi
2023-06-17

VB.NET中怎么实现一个IEnumerator接口

这篇文章给大家介绍VB.NET中怎么实现一个IEnumerator接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。要VB.NET实现IEnumerator接口,需在实现以下几个函数来支持IEnumerator接口的操
2023-06-17

C#中怎么实现一个IDisposable接口

这期内容当中小编将会给大家带来有关C#中怎么实现一个IDisposable接口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#语言有很多值得学习的地方,这里我们主要介绍C#实现IDisposable接口
2023-06-17

C#中怎么实现一个Strategy接口

C#中怎么实现一个Strategy接口,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#实现Strategy接口应用常因用户输入、运行平台和部署环境等的不同执行的任务亦不相同。
2023-06-17

Java 中怎么实现一个Runnable接口

这期内容当中小编将会给大家带来有关Java 中怎么实现一个Runnable接口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。但是Java Runnable 接口并没有任何对线程的支持,我们还必须创建 Th
2023-06-17

Java8中Lambda表达式与函数式接口的示例分析

这篇文章将为大家详细讲解有关Java8中Lambda表达式与函数式接口的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java8被称作Java史上变化最大的一个版本。其中包含很多重要的新特性,最核
2023-05-30

Java8中需要知道的函数式接口有哪些

这篇“Java8中需要知道的函数式接口有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java8中需要知道的函数式接口有
2023-07-05

怎么在Springmvc中实现一个Controller接口

怎么在Springmvc中实现一个Controller接口?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Spring MVC Controller控制器,是MVC中的部分C
2023-05-30

Python中怎么实现一个支付接口

这篇文章给大家介绍Python中怎么实现一个支付接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先定义数据如下:用的测试平台的数据data=[ "", ("p0_Cmd","Buy"), ("p1_Me
2023-06-17

PHP中怎么实现一个支付宝接口

这期内容当中小编将会给大家带来有关PHP中怎么实现一个支付宝接口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在使用支付宝支付的时候,首先必须注册一个支付宝的账户,然后下载支付宝提供的接口文件,通过支付宝
2023-06-17

C#中怎么利用类实现一个接口

这篇文章给大家介绍C#中怎么利用类实现一个接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#类实现接口前面我们已经说过,接口定义不包括方法的实现部分。接口可以通过类或结构来实现。我们主要讲述通过类来实现接口。用类来
2023-06-17

python中怎么实现一个快速支付接口

今天就跟大家聊聊有关python中怎么实现一个快速支付接口,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先定义数据如下:#用的测试平台的数据data=[ "", ("p0_
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录