浏览以下内容前,请点击并阅读 声明

Lambda表达式与匿名类的作用类似,当实现的接口仅有一个方法时,使用lambda表达式能够减少代码的使用量。

//此处定义一个仅含有一个抽象方法的功能接口
interface Intf{
void meth(int var);
}
//此处定义使用上述接口为参数的方法
static void testIntf(Intf a){
//...
}
//此处使用lambda方法创建一个实现上述接口的对象,并传递给上述方法为参数
public static void main(String[] args){
   //1 lambda表达式
//1 lambda表达式----------------------------
testIntf((int var)->{
//...
});
  //-----------------------------------------
//2 使用匿名类实现相同的功能-------------------
testIntf(new Intf(){
public void meth(int var){
//...
}
});
  //-----------------------------------------
}

上述代码为使用lambda表达式的示例,相比较于匿名类,lambda表达式的代码量明显更少。

lambda表达式的使用需要用到功能接口,功能接口是仅含有一个抽象方法的接口,当然可以有其他的默认方法和静态方法,JDK提供了许多内置的标准的功能接口,位于java.util.function包中。

lambda表达式构成:

  • 一对圆括号,括号内是由逗号分隔开的参数,参数的类型可以省略,如果参数只有一个,则圆括号也可省略。
  • 一个由短横线和大于号组成的箭头 ->
  • 表达式主体,可以是表达式(有返回值)或者单个语句(无返回值),或者是一个代码句块(一对花括号内含java语句)。如果是单一的表达式,则计算后返回,也可以在代码块内使用return语句。

lambda表达式变量的使用

与局部类和匿名类相似,lambda表达式能够使用final修饰的局部变量和其所在类的成员。lambda表达式不能遮蔽,以为它并没有引入新的可视范围,其参数名称不能与其所在的可视范围内的变量冲突。

方法引用

lambda表达式中定义了方法,但这个方法只能用一次,我们可以在类中定义这样的方法,然后再对其进行引用。如下例所示:

public class Cla{
//此处定义一个仅含有一个抽象方法的功能接口
interface Intf{
void meth(int var);
}
//此处定义使用上述接口为参数的方法
static void testIntf(Intf a){
//...
}
//此处使用lambda方法创建一个实现上述接口的对象,并传递给上述方法为参数
public static void main(String[] args){
   //1 lambda表达式
//1 lambda表达式
testIntf((int var)->{
//...
});
//引用方法以达到同样的目的
testIntf(Cla::implMeth); }
//定义一个实现Intf接口中方法meth的方法
static void implMeth(int var){
//...
}
}

可以看出,相对与lambda表达式,方法引用的代码量更小了,不同的方法类型引用方法如下:

种类 方法
引用静态方法 包含该方法的类名称::方法名称
引用一个特定对象的实例方法 包含该方法的对象::实例方法名称
引用任意类型的对象的实例方法 包含该方法的类型::方法名称
引用构造器 类名称::new关键词

java-Lambda表达式的更多相关文章

  1. Java Lambda表达式初探

    Java Lambda表达式初探 前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用 ...

  2. Java Lambda表达式入门

    Java Lambda表达式入门 http://blog.csdn.net/renfufei/article/details/24600507 Java 8十个lambda表达式案例 http://w ...

  3. Java Lambda表达式入门[转]

    原文链接: Start Using Java Lambda Expressions http://blog.csdn.net/renfufei/article/details/24600507 下载示 ...

  4. Java Lambda表达式教程与示例

    Lambda表达式是Java 8中引入的一个新特性.一个lambda表达式是一个匿名函数,而且这个函数没有名称且不属于任何类.lambda表达式的概念最初是在LISP编程语言中引入的. Java La ...

  5. Java Lambda表达式forEach无法跳出循环的解决思路

    Java Lambda表达式forEach无法跳出循环的解决思路 如果你使用过forEach方法来遍历集合,你会发现在lambda表达式中的return并不会终止循环,这是由于lambda的底层实现导 ...

  6. 「Flink」使用Java lambda表达式实现Flink WordCount

    本篇我们将使用Java语言来实现Flink的单词统计. 代码开发 环境准备 导入Flink 1.9 pom依赖 <dependencies> <dependency> < ...

  7. java lambda表达式学习笔记

    lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是‘=>’. 杜甫说:射 ...

  8. 《Java基础知识》Java Lambda表达式

    接触Lambda表达式的时候,第一感觉就是,这个是啥?我居然看不懂,于是开始寻找资料,必须弄懂它. 先来看一个案例: @FunctionalInterface public interface MyL ...

  9. Java lambda 表达式常用示例

    实体类 package com.lkb.java_lambda.dto; import lombok.Data; /** * @program: java_lambda * @description: ...

  10. Java lambda 表达式详解(JDK 8 新特性)

    什么是 lambda 表达式 lambda 表达式(拉姆达表达式)是 JAVA 8 中提供的一种新的特性,它使 Java 也能进行简单的"函数式编程". lambda 表达式的本质 ...

随机推荐

  1. SourceTree推送时,增加额外的远程仓库,不用每次都自定义粘贴复制网络

    一.命令行添加 二.软件界面可以查看到结果 更新,以上是代码添加了远程仓库,最近,找到了不用代码,直接在文件夹里写地址来添加的方式.直接上图了.

  2. C#中精确计时的一点收获 【转】

    C#中精确计时的一点收获 [转] 以下所有代码运行环境:Windows 2003, Intel(R) Core(TM) 2 Duo CPU E8400 @  3.00GHz 2.99GHz,2.96G ...

  3. Raid与DAN、SAN、NAS基础

    一. 磁盘基本知识 1. Raid分类 Raid磁盘阵列是由多个磁盘组合成的磁盘组,可将数据分割成许多区段,分别存放在各个磁盘上:同时利用不同排列技术,可提高磁盘性能和数据安全性.下列简单介绍几种Ra ...

  4. Mac Pro 实现 PHP-5.6 与 PHP-7.0 等多版本切换

    先前参考 如何 实现PHP多版本的 共存 和 切换? 实现了Linux(Ubuntu/CentOS)系统下,PHP多版本的切换,但是在 Mac OS 下,由于用户权限控制的比较严格,文章里提到的脚本运 ...

  5. Asp.Net Core--自定义基于策略的授权

    翻译如下: 在封面下,角色授权和声明授权使用需求,需求的处理程序和预配置的策略. 这些构建块允许您在代码中表示授权评估,从而允许更丰富,可重用和容易测试的授权结构. 授权策略由一个或多个需求组成,并在 ...

  6. C/C++ 的使用

    C++    http://www.cplusplus.com/ http://www.cplusplus.me/ *****************容器container vector 转自 htt ...

  7. 好代码系列(一):LazyObject

    site-packages/django/utils/functional.py def new_method_proxy(func): def inner(self, *args): if self ...

  8. install alilang

    $sudo dpkg -i alilang.deb $ sudo alilang

  9. JS事件对象与事件委托

    事件对象 包含事件相关的信息,如鼠标.时间.触发的DOM对象等 js默认将事件对象封装好,并自动的以参数的形式,传递给事件处理函数的第1个参数,如下: document.getElementsByTa ...

  10. Python函数讲解

    Python函数