文档章节

Java Lambda表达式(二)

兴趣使然的程序员
 兴趣使然的程序员
发布于 2017/02/26 12:11
字数 364
阅读 21
收藏 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

共有 人打赏支持
兴趣使然的程序员
粉丝 21
博文 112
码字总数 87412
作品 0
深圳
程序员
【java8】java新特性(二)——lambda表达式

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

kisscatforever
03/20
0
0
Lambda 表达式有何用处?如何使用?(针对Java8)

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

亭子happy
06/06
0
0
java lambda 且行且珍惜

一、先看一个最经典的例子 new Thread(new Runnable() { @Override public void run() { System.out.println("run..."); }}).start(); 这是我们以前多线程的写法,在匿名类里面实现run方法,你...

whaon
2014/04/03
0
0
02、Java的lambda表达式和JavaScript的箭头函数

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

weir_will
06/14
0
0
java8函数表达式的定义[Definition of a Lambda Expression]

英文来源于:Java in a Nutshell, 6th Edition            Definition of a Lambda Expression A lambda expression is essentially a function that does not have a name, and ......

Beaver_
2015/03/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Memcached启动参数详解

memcached -d -m 1024 -l 192.168.100.101 -p 11211 -P /tmp/memcached.pid -c 1024 -f 1.25 -n 80 -t 16 运行参数描述 -d:以守护(daemon)进程方式启动; -u:是运行Memcache的用户,例如 ......

月下狼
17分钟前
0
0
xgboost-kaggle

https://www.kaggle.com/dansbecker/xgboost This tutorial is part of the Learn Machine Learning series. In this step, you will learn how to build and optimize models with the powe......

tantexian
18分钟前
0
0
nginx学习八 代理服务

最常用的语法 proxy_pass Syntax: proxy_pass URL;Default: --Context:location.if in location,limit_exception 反向代理 例:/etc/nginx/conf.d/default.conf 反向代理(代理服务端)......

Romanceling
25分钟前
0
0
npm ERR! Unexpected end of JSON ...

npm install 报错: npm ERR! Unexpected end of JSON input while parsing near '..."^2.8.14"},"_hasShrin' npm ERR! A complete log of this run can be found in: ... 打开终端 命令: 第......

大_侠
29分钟前
0
0
Android中的设计模式之责任链模式

参考 《设计模式:可复用面向对象软件的基础 》5.1 Chain of responsibility 职责链 对象行为型模式 《Android源码设计模式解析与实战》第9章 使编程更有灵活性--责任链模式 意图 使多个对象...

newtrek
32分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部