文档章节

Java Lambda表达式(二)

兴趣使然的程序员
 兴趣使然的程序员
发布于 2017/02/26 12:11
字数 364
阅读 21
收藏 2
点赞 0
评论 0

Java8提供了::操作符,用于简化lambda表达式中引用方法的写法。可以认为::操作符即是引用标识

以下是::操作符主要的使用情况:

  • 对象::实例方法
  • 类::静态方法
  • 类::实例方法
  • 类::构造器方法

在前两种情况中,方法引用等同于提供方法参数的Lambda表达式,例如:

//按钮被点击时打印event对象
button.setOnAction(event->System.out.println(event));

//类::静态方法
button.setOnAction(System.out::println);

//类似的(x,y) -> Math.pow(x,y)相当于Math::pow

在第三种情况中,第一个参数会变成执行方法的对象,例如:

//Stirng::compareToIgnoreCase相当于(x,y)->x.compareToIgnoreCase(y)

在这种情况中可以使用this或者super:

//父类
class Greeter{
    public void greet(){
        System.out.println("Hello World!!");
    }
}

//子类
class  ConcurrentGreeter extends Greeter{
    public void greet(){
        //使用Lambda表达式替代Runnable接口实现
        Thread t1 = new Thread(super::greet);

        //使用接口的匿名实现
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                new Greeter().greet();
            }
        });
    }
}

::同样可以用于引用构造器。引用构造器和“类::实例方法”类似,不同之处在于方法名为“new”

//lambda表达式
x->new int[x];

//构造器引用
int[]::new

//下面是一个有趣的例子,将“构造器引用”(在这个例子中实际上是一个Function接口)放到Map中
static Map<String, Function<Integer, Fruit>> map = new HashMap<>();
static {
    map.put("apple", Apple::new);
    map.put("orange", Orange::new);
    // etc...
}
public static Fruit giveMeFruit(String fruit, Integer weight){
    return map.get(fruit.toLowerCase())
                           .apply(weight);
}

 

本文转载自:写给大忙人看的JAVA SE8

共有 人打赏支持
兴趣使然的程序员
粉丝 21
博文 109
码字总数 87412
作品 0
深圳
程序员
Lambda 表达式有何用处?如何使用?(针对Java8)

什么是Lambda? 我们知道,对于一个Java变量,我们可以赋给其一个“值”。 如果你想把“一块代码”赋给一个Java变量,应该怎么做呢? 比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的J...

亭子happy ⋅ 06/06 ⋅ 0

【java8】java新特性(二)——lambda表达式

一,前言 在上一篇博客中,小编向大家抛转引玉,简单说明了[ Java8 ](http://blog.csdn.net/kisscatforever/article/details/79572194 ),其实Java 8在2014年3月18日,就发布了。可以说程序...

kisscatforever ⋅ 03/20 ⋅ 0

02、Java的lambda表达式和JavaScript的箭头函数

[toc] 前言 在JDK8和ES6的语言发展中,在Java的lambda表达式和JavaScript的箭头函数这两者有着千丝万缕的联系;本次试图通过这篇文章弄懂上面的两个“语法糖”。 简介 Lambda 表达式来源于 ...

weir_will ⋅ 06/14 ⋅ 0

Effective Java 第三版——42.lambda表达式优于匿名类

Tips 《Effective Java, Third Edition》一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8...

M104 ⋅ 05/16 ⋅ 0

你不知道 Java 10 的 5 件事

局部变量类型推断是有争议的热点,但Java 10在JVM中的垃圾收集和容器识别上带来了可喜的变化。 关于本系列 所以你认为你了解Java编程? 事实是,大多数开发人员只是浮于Java平台的表面上,仅...

ismdeep ⋅ 04/24 ⋅ 0

Java Lambda表达式 实现原理分析

本文分析基于JDK 9 一、目标 本文主要解决两个问题: 1、函数式接口 到底是什么? 2、Lambda表达式是怎么实现的? 先介绍一个jdk的bin目录下的一个字节码查看工具及反编译工具:javap 二、函...

xunzaosiyecao ⋅ 04/06 ⋅ 0

Java 已老,Kotlin 或将取而代之!

点击上方“CSDN”,选择“置顶公众号” 关键时刻,第一时间送达! Java已经成为历史。它无法发展成现代语言,同时保证向后兼容性。但它为我们带来了最好的JVM生态系统,并引导了许多优秀语言...

CSDN ⋅ 05/12 ⋅ 0

Effective Java 第三版——43.方法引用优于lambda表达式

Tips 《Effective Java, Third Edition》一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8...

M104 ⋅ 05/22 ⋅ 0

Python和Java的硬盘夜话

点击上方“程序员小灰”,选择“置顶公众号” 有趣有内涵的文章第一时间送达! 本文转载自公众号 码农翻身 这是一个程序员的电脑硬盘,在一个叫做“学习”的目录下曾经生活着两个小程序,一个...

bjweimengshu ⋅ 05/16 ⋅ 0

【java8】java新特性(三)——方法引用

一、前言 之前的文章解释了Java8的Lambda表达式。今天小编继续向大家介绍一下——方法引用。 二、通过lambda表达式引出方法引用 在我们使用Lambda表达式的时候,我们通常使用lambda表达式来创...

kisscatforever ⋅ 03/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android JNI 读写Bitmap的方法

Java层创建Bitmap,通过JNI将Bitmap传到C/C++进行处理 Java部分 public static native boolean greenBitmap(Bitmap bitmap); C/C++部分 JNIEXPORT jboolean JNICALL Java_com_test_Test_gree......

国仔饼 ⋅ 23分钟前 ⋅ 0

一次性让你懂async/await,解决回调地狱

什么是async? 欢迎留言讨论 async 函数是 Generator 函数的语法糖。使用 关键字 async 来表示,在函数内部使用 await 来表示异步。相较于 Generator,async 函数的改进在于下面四点: 内置执...

阿K1225 ⋅ 23分钟前 ⋅ 0

angular常用命令

.下载更新操作 1.利用npm下载angular的命令行工具AngularCLI: npm install -g @angular/cli 2.下载jquery: npm install --save jquery 3.更新npm: npm i -g npm 4.更新angular: ng update ......

消散了的诗意 ⋅ 26分钟前 ⋅ 0

window.print 页面打印

定义和用法 print() 方法用于打印当前窗口的内容。 语法 window.print(); window.print() 实际上,是浏览器打印功能菜单的一种程序调用。与点击打印功能菜单一样,不能精确分页,不能设置纸型...

初学者的优化 ⋅ 26分钟前 ⋅ 0

魔兽世界 7.0版本上 PVE装备全攻略

  T套 因为大家应该都会打穿副本的所以具体是哪个boss我就不说了。   T1: 所有套装都在【熔火之心】出   T2: 头原来是在【奥妮克希亚的巢穴】改到黑翼之巢的奈法利安了,腿是在【熔火之...

wangchen1999 ⋅ 27分钟前 ⋅ 0

java.math.BigDecimal使用小结

原文地址 java.math.BigDecimal使用小结 divide方法 使用BigDecimal.divide方法时一定要考虑: 除数是否为0 商是否是无限小数 正确的使用方式 判断除数是否为0,是0做另外的处理逻辑 调用除法...

666B ⋅ 29分钟前 ⋅ 0

关于qstring转char乱码问题。

if (OpenClipboard(NULL)) { HGLOBAL hgClip; EmptyClipboard(); QByteArray byay = FValue.toLocal8Bit(); //转latin编码 char *bochsrc_line = byay.data(); hgClip = GlobalAlloc(GMEM_DD......

backtrackx ⋅ 30分钟前 ⋅ 0

了解SSH加密和连接过程

介绍 SSH或安全shell是安全协议,也是安全管理远程服务器的最常用方式。通过使用多种加密技术,SSH提供了一种机制,用于在双方之间建立加密安全连接,对彼此进行身份验证,以及来回传递命令和...

吴伟祥 ⋅ 36分钟前 ⋅ 0

微信小程序

小程序的全局配置app.json 微信小程序的全局配置保存在app.json文件中。开发者通过使用app.json来配置页面文件(pages)的路径、窗口(window)表现、设定网络超时时间值(networkTimeout)以...

上官清偌 ⋅ 39分钟前 ⋅ 0

【转】百度坐标坐标系之间的转换(JS版代码)

/** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换 *///定义一些常量var x_PI = 3.1415926535897932...

HAVENT ⋅ 41分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部