文档章节

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

共有 人打赏支持
兴趣使然的程序员
粉丝 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
Java8 - lambda 表达式

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

秋风醉了
08/29
0
0
Java 8 lambda 表达式 示例

Java8中的Lambda表达式取代了匿名类,取消了模板,允许用函数式风格编写代码。这样有时可读性更好,表达更清晰。作为开发人员,我发现学习和掌握lambda表达式的最佳方法就是勇于尝试,尽可能...

阿刚ABC
10/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

没有更多内容

加载失败,请刷新页面

加载更多

初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
57分钟前
4
0
现场看路演了!

HiBlock
昨天
8
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
7
0
官方精简版Windows10:微软自己都看不过去了

微软宣布,该公司正在寻求解决方案,以减轻企业客户的Windows 10规模。该公司声称,企业客户下载整个Windows 10文件以更新设备既费钱又费时。 微软宣布,该公司正在寻求解决方案,以减轻企业...

linux-tao
昨天
8
0
TypeScript基础入门之JSX(二)

转发 TypeScript基础入门之JSX(二) 属性类型检查 键入检查属性的第一步是确定元素属性类型。 内在元素和基于价值的元素之间略有不同。 对于内部元素,它是JSX.IntrinsicElements上的属性类型...

durban
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部