方法引用与构造器引用

关于lambda表达式,我们已经知道了,一般是有两部分组成。箭头操作符(->)左侧是lambda体的参数列表,右侧是lambda体,而lambda体里面的操作,有些情况下可以有另一种写法,更加简短。

可以理解这种写法是lambda表达式的另外一种表现形式,这种写法我们大致可以分为三类,方法引用、构造器引用、数组引用,一般语法格式为X::Y,下面分别看一下。

方法引用

1.对象::实例方法名

/***

* 方法引用1

*/

@Test

public void test01() {

String msg = "hello lambda!";

// lambda体中的功能已经有方法完成 可以使用 方法引用

Consumer consumer = str -> System.out.println(msg);

consumer.accept(msg);

// PrintStream对象

PrintStream printStream = System.out;

// 接口的方法 的参数列表和返回值类型 和 方法引用的 方法 参数列表和返回值类型保持一致

Consumer consumer2 = printStream::println;

consumer2.accept("hello lambda");

}

2.类::实例方法名

/***

* 方法引用2

*/

@Test

public void test01() {

String msg = "hello lambda!";

// lambda体中的功能已经有方法完成 可以使用 方法引用

Consumer consumer = str -> System.out.println(msg);

consumer.accept(msg);

// PrintStream对象

PrintStream printStream = System.out;

// 接口的方法 的参数列表和返回值类型 和 方法引用的 方法 参数列表和返回值类型保持一致

Consumer consumer2 = printStream::println;

consumer2.accept("hello lambda");

}

3.类::实例方法名

/***

* 方法引用3

* pow是Math类的方法

*/

@Test

public void test03() {

// lambda 表达式之前的写法

BinaryOperator binaryOperator = (x, y) -> Math.pow(x, y);

System.out.println(binaryOperator.apply(2d, 3d));

// 接口的方法 的参数列表和返回值类型 和 方法引用的 方法 参数列表和返回值类型保持一致

BinaryOperator binaryOperator2 = (x, y) -> Math.pow(x, y);

System.out.println(binaryOperator2.apply(2d, 3d));

}

构造器引用

与函数式接口相结合,自动与函数式接口中方法兼容。可以把构造器引用赋值给定义的方法,与构造器参数 列表要与接口中抽象方法的参数列表一致,默认使用空的构造器

@Test

public void test05() {

// 获取一个MyClass类型的实例

Supplier myClassSupplier=MyClass::new;

// 获取一个Object类型的实例

Supplier objectSupplier = Object::new;

}

数组引用

利用数组初始化一个Integer数组

@Test

public void test06() {

int size = 10;

Function function = (n) -> new Integer[n];

Integer[] integers = function.apply(size);

}

我的小结

当lambda体内的操作已经有方法实现了,这是的lambda体可以采用方法引用这种方式书写,代码更紧凑简洁,减少冗余。很重要的一点是:接口的方法的参数列表和返回值类型和方法引用的方法,参数列表和返回值类型保持一致

文章首发于黑猫のBlog欢迎来留言啊!!!

java8 构造函数引用_java8新特性之方法引用与构造器引用相关推荐

  1. java8 stream遍历_Java8新特性:Stream流详解

    1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel agg ...

  2. java8遍历数组_java8新特性,使用流遍历集合

    在这篇"Java 8新特性教程"系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值. 在之前的文章"遍历.过 ...

  3. java8 lambda 接口_Java8新特性之一:Lambda表达式

    Java8是自java5之后最重大的一次更新,它给JAVA语言带来了很多新的特性(包括编译器.类库.工具类.JVM等),其中最重要的升级是它给我们带来了Lambda表达式和Stream API. 1. ...

  4. java8 list切片_Java8新特性_创建 Stream、流筛选与切片

    package com.atguigu.java8; import java.util.ArrayList; import java.util.Arrays; import java.util.Ite ...

  5. java8 lambda判断_Java8新特性-Lambda表达式

    Predicate接口使用 请在测试类main方法中完成以下需求 已知有Integer[] arr = {-12345, 9999, 520, 0,-38,-7758520,941213} a) 使用 ...

  6. java8 重复注解_Java8新特性_重复注解与类型注解

    1.总结 1.忘记注解上该写什么时,可以随意写一个注解然后点击进去参考.复制 2.默认情况下不支持重复注解,需要定义容器 3.标注注解为@Repeatable 4.若需要获取注解的值,可以通过反射获取 ...

  7. java8 collect 类型转换_java8新特性之list转换

    // 根据id去重 List unique = appleList.stream().collect( collectingAndThen( toCollection(() -> new Tre ...

  8. 【java8新特性】——方法引用(四)

    一.简介 方法引用是java8的新特性之一, 可以直接引用已有Java类或对象的方法或构造器.方法引用与lambda表达式结合使用,可以进一步简化代码. 来看一段简单代码: public static ...

  9. java8 stream 做累加_Java8新特性之Stream(上)|乐字节

    上次给大家介绍了Java8新特性之方法引用,大家可以点击回顾下.接下来小乐继续给大家带来Java8新特性之Stream ,流是Java8最重要的内容,小乐准备分上下两部分介绍,今天是上部. 5.1.什 ...

最新文章

  1. ubuntukylin-14.04.2-desktop-amd64中python2.7版本安装机器学习库
  2. 计算机浙大网java网站,网络课程—非计算机专业JAVA程序设计语言
  3. XML Programming with C# and .NET
  4. Linux Shell 常用命令与目录分区的学习总结
  5. html5触摸事件判断滑动方向,H5触摸事件中如何判断用户滑动方向
  6. 仅用半小时,从Python爬取到BI可视化,告诉你深圳房价有多贵
  7. 几种常见的微服务架构方案——ZeroC IceGrid、Spring Cloud、基于消息队列、Docker Swarm...
  8. PHP内存溢出:Allowed memory size of 536870912 bytes exhausted (tried to allocate 20480 bytes)
  9. java实现萤火虫算法_基于萤火虫算法的矢量图生成方法
  10. 经典Hive-SQL面试题及答案
  11. Flutter 静态挂载腾讯X5WebView(Tbs)浏览器内核
  12. mysql重启服务命令_重启mysql命令
  13. matlab截掉空间曲面一部分,用Matlab作空间曲面的切平面及法线图像.ppt
  14. Python黑客帝国装逼代码
  15. 2016总结——在路上,我走到哪儿了?
  16. 你知道CAD软件将圆弧与直线转换成多段线的方法吗?
  17. 基于Linux系统的边界网关协议的设计与实现
  18. MSSQL SERVER中出现服务器MSDTC不可用的解决方法
  19. [学习][Vim]行号的显示与隐藏
  20. Cocos技术派 | 导入FBX模型实现真3d效果

热门文章

  1. 微信公众开放平台开发03---百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试
  2. eclipse 方法补全快捷键设置
  3. 软件自动化测试题,软件自动化测试模拟题.doc
  4. 随想录(thread类的编写)
  5. 嵌入式操作系统内核原理和开发(延时操作)
  6. 一步一步写算法(之克鲁斯卡尔算法 下)
  7. mysql创建表设置数值范围,MySQL创建数据表时设定引擎MyISAM/InnoDB操作
  8. 剪切caspase3_caspase-3
  9. python实现简单爬虫百度首页_python实现简单爬虫功能的示例
  10. linux 命令mysql5.6,linux下mysql5.5mysql5.6的tar包安装