JAVA8方法引用
方法引用:若Lambda方法体已经实现,我们可以使用方法引用
* 主要有三种语法格式:
* 对象::实例方法名
* 类::实例方法名
* 类::静态方法名
*
* 注意:Lambda体中调用的方法的参数列表与返回值类型,要与函数式中接口的抽象方法的参数列表和返回值类型一样
*
*
* 构造器引用:
* 格式:ClassName::new
*
*
* 数组引用:
* Type :: new
package airycode_java8.nice5; import airycode_java8.nice1.Employee;
import org.junit.Test; import java.io.PrintStream;
import java.util.Comparator;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier; /**
*
* 方法引用:若Lambda方法体已经实现,我们可以使用方法引用
* 主要有三种语法格式:
* 对象::实例方法名
* 类::实例方法名
* 类::静态方法名
*
* 注意:Lambda体中调用的方法的参数列表与返回值类型,要与函数式中接口的抽象方法的参数列表和返回值类型一样
*
*
* 构造器引用:
* 格式:ClassName::new
*
*
* 数组引用:
* Type :: new
*
*
*
*
* Created by admin on 2019/1/2.
*/
public class TestMethodRef { @Test
public void test1(){
PrintStream ps = System.out;
//Consumer<String> con = (x)-> ps::println;
Consumer<String> consumer = (x)-> ps.println();
// Consumer<String> consumer2 = ps::println;
consumer.accept("aaa");
} @Test
public void test2(){
Employee employee = new Employee();
Supplier<String> supplier = () -> employee.getName();
String str = supplier.get();
System.out.println(str); Supplier<Integer> supplier2 = employee::getAge;
Integer age = supplier2.get();
System.out.println(age); } //静态方法
@Test
public void test3(){ Comparator<Integer> comparator = (x,y)->Integer.compare(x,y); Comparator<Integer> comparator2 = Integer::compare;//方法引用 } //类::实例方法(规则:两个参数,第一个参数是调用方法的实例的调用者(x),第二个参数是实例方法(equals)的参数值(y))
@Test
public void test4(){
BiPredicate<String,String> bp = (x,y)->x.equals(y);
BiPredicate<String,String> bp2 = String::equals;
} //构造器
@Test
public void test5(){
Supplier<Employee> emp = ()->new Employee(); Supplier<Employee> emp2 = Employee::new; Employee employee = emp2.get();
System.out.println(employee);
} //一个参数构造器
@Test
public void test6(){
Function<Integer,Employee> fun = (x)->new Employee(x);
Function<Integer,Employee> fun2 = Employee::new;
Employee employee = fun2.apply(101);
System.out.println(employee.getAge());
} //数组引用
@Test
public void test7(){
Function<Integer,String[]> fun = (x)->new String[x];
String[] arr = fun.apply(10);
System.out.println(arr.length); Function<Integer,String[]> fun2 = String[]::new;
String[] arr2 = fun.apply(20);
System.out.println(arr2.length);
} }
JAVA8方法引用的更多相关文章
- Java8 方法引用
概述 方法引用是用来直接访问类或实例阴茎存在的方法或者构造方法.它需要由兼容的函数式接口(lambda表达式中用到的接口)构成的目标类型上下文. 有时候, 当我们想要实现一个函数式接口的方法, 但是已 ...
- Java8 方法引用和构造方法引用
如果不熟悉Java8新特性的小伙伴,初次看到函数式接口写出的代码可能会是一种懵逼的状态,我是谁,我在哪,我可能学了假的Java,(・∀・(・∀・(・∀・*),但是语言都是在进步的,就好比面向对象的语言 ...
- Java8 方法引用与构造器引用,数组引用
package java_8; import org.junit.Test; import java.io.PrintStream; import java.util.Comparator; impo ...
- Java8——方法引用
方法引用就是通过类名或方法名引用已经存在的方法来简化lambda表达式.那么什么时候需要用方法引用呢?如果lamdba体中的内容已经有方法实现了,我们就可以使用方法引用. 一.方法引用的三种语法格式 ...
- java8 方法引用与lambda
List<String> list = new ArrayList<>(); //list.stream().filter((String s)->System.out. ...
- Java 方法引用_特性
JAVA8 方法引用:(四种方法引用的使用) 对象引用的特点:不同的对象可以操作同一块的内容:而方法引用就是指为一个方法设置别名,相当于一个方法定义了不同的名字. 引用静态方法: 类名称 :: sta ...
- Java笔记——Java8特性之Lambda、方法引用和Streams
Java8已经推出了好一段时间了,而掌握Java8的新特性也是必要的,如果要进行Spring开发,那么可以发现Spring的官网已经全部使用Java8来编写示例代码了,所以,不学就看不懂. 这里涉及三 ...
- 30分钟入门Java8之方法引用
30分钟入门Java8之方法引用 前言 之前两篇文章分别介绍了Java8的lambda表达式和默认方法和静态接口方法.今天我们继续学习Java8的新语言特性--方法引用(Method Referenc ...
- Java8新特性之二:方法引用
上一节介绍了Java8新特性中的Lambda表达式,本小节继续讲解Java8的新特性之二:方法引用.方法引用其实也离不开Lambda表达式. 1.方法引用的使用场景 我们用Lambda表达式来实现匿名 ...
随机推荐
- ES6:export default 和 export 区别
export default 和 export 区别: 1.export与export default均可用于导出常量.函数.文件.模块等 2.你可以在其它文件或模块中通过import+(常量 | 函 ...
- 最佳实践:腾讯HTAP数据库TBase助力某省核心IT架构升级
https://mp.weixin.qq.com/s/56NHPyzx5F6QeCjuOq5IRQ 资源隔离能力: 在HTAP系统中,OLTP和OLAP业务要同时运行,两者都会消耗巨量的资源都,如果不 ...
- php 之数组
PHP之array数组 PHP中的数组实际上是一个有序映射.映射是一种把values关联到keys的类型.此类型在很多方面做了优化, 因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实 ...
- airflow
基于airflow官方镜像制作自己的镜像,如给镜像安装pymongo FROM /common/air_grpc: MAINTAINER zhangchunyang@goldwind.com.cn U ...
- JRE vs OpenJDK vs Oracle JDK
JRE vs OpenJDK vs Oracle JDK 在我们继续了解如何安装Java之前,让我们快速地了解JRE.OpenJDK和Oracle JDK之间的不同之处. JRE(Java Runti ...
- DEV获取GridControl当前行
//直接通过gridView获取当前行dr=this.gridView1.GetDataRow(this.gridView1.FocusedRowHandle);//通过DataSet获取数据,需要转 ...
- ORA-01950: no privileges on tablespace XXX
原因是该表空间没有为用户提供配额空间 alter user WANGGUAN quota unlimited on TS_ACCT_DAT_01; 在表空间中为该用户设置磁盘配额即可
- 20165336 2017-2018-2 《Java程序设计》第2周学习总结
学号 2017-2018-2 20165336 <Java程序设计>第2周学习总结 教材学习内容总结 第二章 标识符第一个字符不能是数字 标识符不能是关键字 byte型变量的取值范围是-2 ...
- DNS服务基础原理介绍
FQDN 全称域名 localhost(主机名或者是别名).localdomain(域名) FQDN=主机名.域名 根域 . 顶级域名 .com .n ...
- 多线程——继承Thread类实现一个多线程
继承Thread类实现一个多线程 Thread类部分源码: package java.lang; //该类实现了Runnable接口 public class Thread implements Ru ...