Java 8 之 Lambdas :: 双冒号引用

JDK8中有双冒号的用法,就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下。

什么是Lambda表达式

Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使 Java的语言表达能力得到了提升。

方法引用 ::

方法引用是什么 ?

方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的目标类型上下文。计算时,方法引用会创建函数式接口的一个实例。

当Lambda表达式中只是执行一个方法调用时,不用Lambda表达式,直接通过方法引用的形式可读性更高一些。

  • 作用
    方法引用的唯一用途是支持Lambda的简写。
    方法引用提高了代码的可读性,也使逻辑更加清晰。
  • 组成
    使用::操作符将方法名和对象或类的名字分隔开。
    “::” 是域操作符(也可以称作定界符、分隔符)。

Java 8 之 Lambdas :: 双冒号引用_第1张图片

首先定义一个 列表:

Java 8 之 Lambdas :: 双冒号引用_第2张图片

静态方法引用

ClassName::staticMethod

等同于把lambda表达式的参数直接当成staticMethod的参数来调用。

Java 8 之 Lambdas :: 双冒号引用_第3张图片

执行结果:

Java 8 之 Lambdas :: 双冒号引用_第4张图片

实例方法引用

一、objectName::instanceMethod

等同于把lambda表达式的参数直接当成instanceMethod的参数来调用。

Java 8 之 Lambdas :: 双冒号引用_第5张图片

执行结果:

Java 8 之 Lambdas :: 双冒号引用_第6张图片

二、ClassName::instanceMethod

等同于把lambda表达式的第一个参数当成instanceMethod的目标对象,其他剩余参数当成该方法的参数。

Java 8 之 Lambdas :: 双冒号引用_第7张图片

执行结果:

Java 8 之 Lambdas :: 双冒号引用_第8张图片

构造方法引用(构造器引用)

构造器引用语法如下:ClassName::new,把lambda表达式的参数当成ClassName构造器的参数 

ClassName::new

Java 8 之 Lambdas :: 双冒号引用_第9张图片

执行结果:

Java 8 之 Lambdas :: 双冒号引用_第10张图片

总结

Lambda 表达式在Java 语言中引入了一个新的语法元 素和操作符。这个操作符为 “->” , 该操作符被称为 Lambda 操作符或剪头操作符。

它将 Lambda 分为 两个部分: 

左侧:指定了 Lambda 表达式需要的所有参数 

右侧:指定了 Lambda 体,即 Lambda 表达式要执行的功能。

你可能感兴趣的:(JDK,Lambdas,双冒号,::,JDK8)