Java8 Lambda表达式实战之方法引用(一)
方法的引用
方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法,方法引用提供了一种引用而不执行方法的方式,如果抽象方法的实现恰好可以使用调用另外一个方法来实现,就有可能可以使用方法引用
方法的引用分类

静态方法引用
如果函数式接口的实现恰好可以通过调用一个静态方法来实现,那么就可以使用静态方法引用(静态方法的引用与实例方法的引用基本不受限制,只要满足调用条件即可)
静态方法引用示例代码:
/**
* @auther hhh
* @date 2018/12/28 23:02
* @description 如果函数式接口的实现恰好可以通过调用一个静态方法来实现,那么就可以使用静态方法引用
* 语法:类名::staticMethod
* 注意:
* 方法的引用不需要括号,因为其仅仅是方法的引用,并没有执行
* 使用的函数式接口输入输出必须与定义的函数式接口一致
*/
public class StaticMethodUse{
static <T> String hello(T s) {
return s.toString();
}
static <T> String ret() {
return "hello";
}
static void getSize(String s) {
System.out.println(s.length());
}
static String toUpCase(String s){
return s.toUpperCase();
}
public static void main(String[] args) {
Supplier<String> supplier = () -> hello("hello");
//使用方法引用 Supplier T get();
// 1、只支持输出参数,不支持输入参数,所以一下方法报错
//2、方法的引用为什么不需要括号?因为其仅仅是方法的引用,并没有执行
//Supplier<String> stringSupplier = StaticMethodUse::hello("wqer");
Supplier<String> s = StaticMethodUse::ret;
Supplier<String> supplier1 = Fun::put;
Function<Integer, String> function = StaticMethodUse::hello;
//方法的参数必须在调用的时候传入,必须调用函数式接口
System.out.println("function" + function.apply(123)); //普通lambda使用
Consumer<String> consumer = size -> StaticMethodUse.getSize(size);
//方法的引用为什么不需要括号?因为其仅仅是方法的引用,并没有执行
Consumer<String> c1 = StaticMethodUse::getSize;
c1.accept("hello use lambda"); //输出参数大写
Function<String ,String> function1 = (ss) -> ss.toUpperCase();
Function<String,String> function2 = StaticMethodUse::toUpCase;
Function<String,String> function3 = Fun::toUpCase;
System.out.println(function1.apply("aasdf"));
System.out.println(function2.apply("aasdf"));
System.out.println(function3.apply("aasdf"));
}
} class Fun {
static String put() {
return "hello";
}
static String toUpCase(String s){
return s.toUpperCase();
}
}
实例方法引用
如果函数式接口的实现恰好可以通过调用一个实例的实例方法来实现,那么就可以使用实例方法引用
示例代码:
/**
* @auther hhh
* @date 2018/12/28 23:29
* @description 实例方法引用
* 如果函数式接口的实现恰好可以通过调用一个实例的实例方法来实现,那么就可以使用实例方法引用
* 语法: new instMethod()::method
* 注意:后面不需要加括号也不需要加参数
*/
public class InstantMethodUse extends Base {
String put() {
return "hello";
} public String toUpCase(String s) {
return s.toUpperCase();
} //调用当前实例的方法
void test() {
UnaryOperator<String> unaryOperator = this::toUpCase;
System.out.println(unaryOperator.apply("this inst method"));
//调用父类的实例方法
UnaryOperator<String> u1 = super::toUpCase;
System.out.println(u1.apply("use super upCase method"));
} public static void main(String[] args) {
Supplier<String> stringSupplier = () -> new InstantMethodUse().put();
Supplier<String> stringSupplier1 = () -> {
return new InstantMethodUse().put();
};
Supplier<String> stringSupplier2 = new InstantMethodUse()::put;
//普通lambda表达式使用
Supplier<String> stringSupplier3 = () -> new InstantMethodUse().put();
System.out.println(stringSupplier2.get());
//两种方式使用
UnaryOperator<String> unaryOperator = new InstantMethodUse()::toUpCase;
//新建对象引用
InstantMethodUse instantMethodUse = new InstantMethodUse();
UnaryOperator<String> unaryOperator1 = instantMethodUse::toUpCase;
System.out.println(unaryOperator.apply("lambda instMethod Use") + " === " + unaryOperator1.apply("lambda instMethod Use")); instantMethodUse.test();
}
}
Java8 Lambda表达式实战之方法引用(一)的更多相关文章
- [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口
函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...
- 【Java学习笔记之三十一】详解Java8 lambda表达式
Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...
- java8 快速入门 lambda表达式 Java8 lambda表达式10个示例
本文由 ImportNew - lemeilleur 翻译自 javarevisited.欢迎加入翻译小组.转载请见文末要求. Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发 ...
- Java8 lambda表达式10个示例
Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...
- Java8 lambda表达式10个示例<转>
例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例.看一下Java 8之前的runna ...
- java8 lambda表达式应用
1.用lambda表达式实现Runnable非常简单// Java 8之前: new Thread(new Runnable() { @Override public void run() { Sys ...
- Java8 Lambda表达式、函数式接口和方法引用
目录 Java8 Lambda表达式和函数式接口 Lambda表达式 Lambda的使用 函数式接口FunctionalInterface Java内置四大核心函数式接口 方法引用 构造器引用 Jav ...
- Java8 Lambda表达式详解手册及实例
先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...
- java8 Lambda表达式的10个例子(转)
原文:http://jobar.iteye.com/blog/2023477 Java8中Lambda表达式的10个例子 例1 用Lambda表达式实现Runnable接口 Java代码 收藏代码// ...
随机推荐
- GetDIBits 提示堆栈损坏的解决办法
...... BITMAPINFOHEADER bi; bi.biSize = sizeof(BITMAPINFOHEADER); bi.biWidth = bmpScreen.bmWidth; bi ...
- SqlParameter.Value = NULL 引发的数据库异常
摘自:http://www.cnblogs.com/ccweb/p/3403492.html using (SqlCommand cmd = new SqlCommand()) { cmd.Conne ...
- 浅聊IOC
1.概述 IOC:有很多人把控制反转和依赖注入混为一谈,虽然在某种意义上来看他们是一体的,但好像又有些不同. 1. IOC(控制反转)是一个控制容器,DI(依赖注入)就是这个容器的运行机制. 2. I ...
- 轮播图3D效果--roundabout(兼容IE8)升级版
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- luogu P4231 三步必杀
嘟嘟嘟 这道题就是区间加一个等差数列,然后最后求每一个数的值. O(n)做法:二阶差分. 其实就是差分两遍.举个例子 0 0 0 0 0 0 0,变成了 0 2 4 6 8 0 0.第一遍差分:0 2 ...
- PHP------析构方法
析 构 方 法 封装,有一个叫构造函数 和构造函数对应的还有一种方法叫做析构. class ren //一个类 是 人类 { public $mingzi ://成员变量 punction__d ...
- html拼接时onclick事件传递json对象
Bootstrap Table 中拼装onclick传递json对象会造成[object,object]错误,反正各种传值不成功, 应该是因为json对象中的‘’‘’引号冲突吧,直接把json对象转成 ...
- java使用jsp建立项目+视频
项目下载:https://pan.baidu.com/s/1rfwrihd82zAmpt3r-mxIMw 视频+项目下载:https://pan.baidu.com/s/17Cm0wW-S9xiUy4 ...
- HDU 2080(三角函数)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2080 夹角有多大II Time Limit: 1000/1000 MS (Java/Others) ...
- SecureCRT连接主机时(串口/网络),无法从键盘输入
Session Option-Connection-Serial-Flow Control,里面的选项全部取消掉,再重启CRT就ok了...