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表达式来实现匿名 ...
随机推荐
- 进制转换 map
a_z = [i for i in map(chr, range(ord('a'), ord('z') + 1))]'''Address of var1 variable: 240ff24Addres ...
- hhvm
hhvm(Hip Virtual Machine),是一个虚拟机,用来运行PHP的 hhvm是有Facebook开发的,用户提升PHP性能的,hhvm是开源的,
- URL编码问题
一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号. 比如,世界上有英文字母的网址"http://www.abc.com", 但是没有希腊字母的网址 ...
- xcode工程编译错误:"An instance 0xca90200 of class UITableView was deallocated while key value observers were still registered with it"
An instance 0xca90200 of class UITableView was deallocated while key value observers were still regi ...
- 自己写的JdbcUtils小工具-----得到Connection对象
Properties文件中存放键值对------(可看对Properties文件的解析) static代码块是在构造函数之前执行的,而且只执行一次,即类首次加载时. 也就是只加载一次配置文件和加载数据 ...
- 添加图片后xcode报错:resource fork, Finder information, or similar detritus not allowed
/Users/songximing/Library/Developer/Xcode/DerivedData/Children-cvqgzlzddltkfndhdmzedxbnoxwx/Build/Pr ...
- 对vue生命周期的理解
总共分为8个阶段,创建前/后,载入前/后,更新前/后,销毁前/后: 创建前/后:在beforeCreated阶段,vue实例的挂载元素$el和数据对象data都为undefined,还未初始化.在cr ...
- OC分割输入验证码的视觉效果
效果图: 用到的类: UITextField+VerCodeTF.h #import <UIKit/UIKit.h> @protocol VerCodeTFDelegate <UIT ...
- 20170719 Mysql 配置远端Mysql访问,增加表/存储过程
-- 1 .在windows 环境中安装Mysql 会按照到默认的C盘当中,如何修改呢--? -- 2. 如何只安装客户端不安装Mysql 数据库服务 --? -- 3. 表的特殊列,默认采用函数值 ...
- Python3学习之路~2.8 文件操作实现简单的shell sed替换功能
程序:实现简单的shell sed替换功能 #实现简单的shell sed替换功能,保存为file_sed.py #打开命令行输入python file_sed.py 我 Alex,回车后会把文件中的 ...