文档章节

Java Lambda表达式(二)

兴趣使然的程序员
 兴趣使然的程序员
发布于 2017/02/26 12:11
字数 364
阅读 23
收藏 2

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

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

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

亭子happy
06/06
0
0
02、Java的lambda表达式和JavaScript的箭头函数

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

weir_will
06/14
0
0
【java8】java新特性(二)——lambda表达式

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

kisscatforever
03/20
0
0
Java8 - lambda 表达式

lambda表达式 为什么需要lambda 表达式 函数对 Java 而言并不重要,在 Java 的世界里,函数无法独立存在。Lambda 表达式为 Java 添加了缺失的函数式编程特点,使我们能将函数当做一等公民看待...

秋风醉了
08/29
0
0
Java 8 vs. Scala:Part I

比较 Java 8 和 Scala 在使用 Stream API 时的表达方式和性能的差异。 经过漫长的等待,终于等到了有着高阶函数的 Java 8。我迷恋 Java,但是我必须承认和现在一些其它的语言相比 Java 的语法...

oschina
2015/11/13
6K
64

没有更多内容

加载失败,请刷新页面

加载更多

防御CSRF攻击

跨站请求伪造(CSRF)是一种安全漏洞,攻击者利用受害者的 session 来通过受害者的浏览器发出请求。攻击者通过受害者的浏览器发送请求,并伪造成是受害者自己发出的请求。 建议你先熟悉CSRF,...

Landas
28分钟前
1
0
【双12首发】终于等来了!PhalApi-iView-admin 开源后台框架

PhalApi-iView-admin 开源后台框架 码云地址:https://gitee.com/dogstar/phalapi-iview-admin Github地址:https://github.com/phalapi/phalapi-iview-admin 主要采用的技术: PhalApi 开源......

暗夜在火星
28分钟前
1
0
JavaScript面试题大坑之隐式类型转换实例代码

1.1-隐式转换介绍 在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转成一样的数据类型再计算 这种无需程序员手...

peakedness丶
31分钟前
0
0
示例vue 的keep-alive缓存功能的实现

本篇文章主要介绍了vue 的keep-alive缓存功能的实现,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 #Vue 实现组件信息的缓存 当...

前端攻城老湿
32分钟前
2
0
解析Vue.js中的computed工作原理

我们通过实现一个简单版的和Vue中computed具有相同功能的函数来了解computed是如何工作的。写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批...

前端攻城小牛
33分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部