java8 构造函数引用_java8新特性之方法引用与构造器引用
方法引用与构造器引用
关于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新特性之方法引用与构造器引用相关推荐
- java8 stream遍历_Java8新特性:Stream流详解
1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel agg ...
- java8遍历数组_java8新特性,使用流遍历集合
在这篇"Java 8新特性教程"系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值. 在之前的文章"遍历.过 ...
- java8 lambda 接口_Java8新特性之一:Lambda表达式
Java8是自java5之后最重大的一次更新,它给JAVA语言带来了很多新的特性(包括编译器.类库.工具类.JVM等),其中最重要的升级是它给我们带来了Lambda表达式和Stream API. 1. ...
- java8 list切片_Java8新特性_创建 Stream、流筛选与切片
package com.atguigu.java8; import java.util.ArrayList; import java.util.Arrays; import java.util.Ite ...
- java8 lambda判断_Java8新特性-Lambda表达式
Predicate接口使用 请在测试类main方法中完成以下需求 已知有Integer[] arr = {-12345, 9999, 520, 0,-38,-7758520,941213} a) 使用 ...
- java8 重复注解_Java8新特性_重复注解与类型注解
1.总结 1.忘记注解上该写什么时,可以随意写一个注解然后点击进去参考.复制 2.默认情况下不支持重复注解,需要定义容器 3.标注注解为@Repeatable 4.若需要获取注解的值,可以通过反射获取 ...
- java8 collect 类型转换_java8新特性之list转换
// 根据id去重 List unique = appleList.stream().collect( collectingAndThen( toCollection(() -> new Tre ...
- 【java8新特性】——方法引用(四)
一.简介 方法引用是java8的新特性之一, 可以直接引用已有Java类或对象的方法或构造器.方法引用与lambda表达式结合使用,可以进一步简化代码. 来看一段简单代码: public static ...
- java8 stream 做累加_Java8新特性之Stream(上)|乐字节
上次给大家介绍了Java8新特性之方法引用,大家可以点击回顾下.接下来小乐继续给大家带来Java8新特性之Stream ,流是Java8最重要的内容,小乐准备分上下两部分介绍,今天是上部. 5.1.什 ...
最新文章
- ubuntukylin-14.04.2-desktop-amd64中python2.7版本安装机器学习库
- 计算机浙大网java网站,网络课程—非计算机专业JAVA程序设计语言
- XML Programming with C# and .NET
- Linux Shell 常用命令与目录分区的学习总结
- html5触摸事件判断滑动方向,H5触摸事件中如何判断用户滑动方向
- 仅用半小时,从Python爬取到BI可视化,告诉你深圳房价有多贵
- 几种常见的微服务架构方案——ZeroC IceGrid、Spring Cloud、基于消息队列、Docker Swarm...
- PHP内存溢出:Allowed memory size of 536870912 bytes exhausted (tried to allocate 20480 bytes)
- java实现萤火虫算法_基于萤火虫算法的矢量图生成方法
- 经典Hive-SQL面试题及答案
- Flutter 静态挂载腾讯X5WebView(Tbs)浏览器内核
- mysql重启服务命令_重启mysql命令
- matlab截掉空间曲面一部分,用Matlab作空间曲面的切平面及法线图像.ppt
- Python黑客帝国装逼代码
- 2016总结——在路上,我走到哪儿了?
- 你知道CAD软件将圆弧与直线转换成多段线的方法吗?
- 基于Linux系统的边界网关协议的设计与实现
- MSSQL SERVER中出现服务器MSDTC不可用的解决方法
- [学习][Vim]行号的显示与隐藏
- Cocos技术派 | 导入FBX模型实现真3d效果
热门文章
- 微信公众开放平台开发03---百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试
- eclipse 方法补全快捷键设置
- 软件自动化测试题,软件自动化测试模拟题.doc
- 随想录(thread类的编写)
- 嵌入式操作系统内核原理和开发(延时操作)
- 一步一步写算法(之克鲁斯卡尔算法 下)
- mysql创建表设置数值范围,MySQL创建数据表时设定引擎MyISAM/InnoDB操作
- 剪切caspase3_caspase-3
- python实现简单爬虫百度首页_python实现简单爬虫功能的示例
- linux 命令mysql5.6,linux下mysql5.5mysql5.6的tar包安装