lambda 表达式可以算是java8 最大的新特性了, Lambda 表达式其实就是匿名内部类的简单实现方式, 去掉了匿名内部类的模板式代码, 只保留匿名内部类中抽象方法的核心代码, 使代码看起来更简洁. lambda 表达式需要函数式接口支持, 适用于策略设计模式. 此外, java8 增强了类型推断, 可以通过目标方法上下文推断参数类型. 对于同级别局部变量在匿名内部类中使用时,无须再显示声明final, 但底层依旧是final 类型, lambda表达式中不能修改.

1. Lambada 语法格式

java8 引入了一个新的操作符 -> , 称为箭头操作符或Lambda操作符. 箭头将lambda表达式分为左右两部分:

  • 左侧: Lambada 表达式的参数列表, 相当于匿名内部类中抽象方法的参数
  • 右侧: Lambada 表达式的方法体, 相当于匿名内部类中抽象方法的方法体
参数列表 -> 方法体
(参数) -> {方法体}

2. Lambda 表达式常见语法格式

lambda 表达式的参数个数, 方法体语句行数的差异, lambda 表达式提供了相应的简写方式,因此也就产生了多种多样的lambda 表达式格式.

  • 当只有一个参数时, 参数列表的括号可以省略. 但是当没有参数或者多个参数的时候,括号均不能省略.
  • 当方法体只有一行语句时, 方法体的大括号也可以省略
  • 当方法体只有一行return 语句时, return 也可以省略
  • 参数类型也可以省略,通常也是省略的.java8 自身会根据上下文进行类型推断.
  • lambda 其实就是匿名内部类的一种语法糖, 为了方便开发人员开发代码.

2.1 无参数, 无返回值

@Test
public void test_1(){Runnable runnable = () -> System.out.println(LocalDateTime.now());runnable.run();
}

2.2 有一个参数, 无返回值

@Test
public void test_2(){Consumer<String> consumer = (name) -> System.out.println(name);consumer.accept("zhangsan");// 左侧只有一个参数时, 小括号可以不写. 当无参数或多个参数时,都必须写.Consumer<String> consumer1 = name -> System.out.println(name);consumer1.accept("lisi");
}

2.3 有一个参数, 有返回值

@Test
public void test_3(){Function<Employee, String> function = (employee -> employee.getName());Employee emp = new Employee(1001, "zhangsan", "Man", 20);String name = function.apply(emp);System.out.println(name);
}

2.4 有一个参数, 多条语句,无返回值

@Test
public void test_4(){// lambda 体中多条语句时,使用大括号包裹, 使用return 返回值Comparator<Integer> intCmp = (x, y) -> {System.out.println("x:" + x + ",y:" + y);return Integer.compare(x, y);};System.out.println(intCmp.compare(3, 5));// 当lambda 体中只有一条语句时, 大括号和return 都可以省略Comparator<Double> doubleCmp = (x, y) -> Double.compare(x, y);System.out.println(doubleCmp.compare(3.0, 5.0));}

2.5 省略参数类型, java8来做类型推断

@Test
public void test_5(){// 完整写法, 不省略大小括号和returnBinaryOperator<Long> biOper = (Long x, Long y) -> {return x + y;};System.out.println("10 + 20 = " + biOper.apply(10l, 20l));// 省略大括号, 参数类型, returnBinaryOperator<Long> biOper2 = (x, y) -> x + y;System.out.println("10 + 20 = " + biOper2.apply(10l, 20l));

01. Java8-Lambada 表达式相关推荐

  1. java8的表达式_java8中的Lambda表达式

    lambad表达式是一个匿名函数,既没有函数名的函数.在lambda表达式出现之前,java中更多使用的是匿名内部类所以有些刚刚接触lambda表达式的人会把lambda表达式误认为就是匿名内部类的简 ...

  2. lambada表达式介绍

    前言 在其他语言中,函数式编程是很常见的,java8中为了支持函数式编程,新增了lambada表达式.lambada表达式其实是匿名内部类和闭包的一种符号表示,至于概念性的问题,大家不必深究,lamb ...

  3. JDK1.8之Lambada表达式一

    一. lambada表达式简介 我们知道对于Java变量可以赋给其一个值,而如果想将"一块代码(一个完整的方法)"赋给一个Java变量,如下所示,怎么做呢? 你可能认为就是下面的方 ...

  4. lambada表达式总结

    前言 作为jdk1.8的新特性,8的标准库都开始大量使用lambda表达式了,你有什么理由不去学习lambda,这么简洁,这么爽的一种编程方法,不学不觉得可惜吗? lambda即λ,是匿名函数的意思, ...

  5. 第十节 Java工具包-Collections 流--lambada表达式

     collection为核心的接口,包含了多种不同类型的集合以及多种不同数据结构的实现的类 list  set queue都是在collection接口下的所以都有.add()方法 package c ...

  6. Lambada表达式全面详解

    Lambada表达式全面详解 文章目录 Lambada表达式全面详解 前言 入门 类名引用静态方法 对像名引用方法 构造器引用 前言 Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿 ...

  7. java8 lambda 表达式详解

    lambada 表达式实质上是一个匿名方法,但该方法并非独立执行,而是用于实现由函数式接口定义的唯一抽象方法 使用 lambda 表达式时,会创建实现了函数式接口的一个匿名类实例 可以将 lambda ...

  8. 2.cocos2dx 3.2中语法的不同之处,lambada表达式的使用和function和bind函数的使用

    1        打开建好的T32  Cocos2dx-3.2的一个项目 2        设置Cocos显示窗口的位置是在AppDelegate.cpp中: 3  设置自适应窗口大小的代码是在上面的 ...

  9. lambada表达式

     lambda表达式 //C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作.Lambda的语法形式如下: //[函数对象参数](操作符重载函数参数)mutable或e ...

  10. java8 lambda表达式实现自定义用户组件,Don't Repeat Yourself

    2019独角兽企业重金招聘Python工程师标准>>> 一.用户组件的功能 使用java8 lambda表达式实现实现世界的一个例子:用户组件.此用户组件有以下几个操作:获取用户列表 ...

最新文章

  1. 【Spring boot 实战】使用Maven插件构建Docker镜像
  2. 用这种方法实现无监督端到端图像分类!(附论文)
  3. 传输控制协议(TCP)基础知识概述
  4. postman中 form-data、x-www-form-urlencoded、raw、binary的区别--转
  5. Java 文件重命名
  6. 什么是页损坏 mysql_MySQL数据库页损坏怎么办,innodb_force_recovery参数帮你解决问题...
  7. python爬虫07--代理
  8. Maven3路程(六)用Maven创建Spring3 MVC项目
  9. DNGuard HVM 专业版 v2.7 正式发布。
  10. 如何开具和交付给客户电子发票
  11. 【渝粤教育】国家开放大学2018年春季 0092-22T民法 参考试题
  12. php 左侧飘浮广告代码,JS随机漂浮广告代码具体实例
  13. 【数据挖掘】PCA 主成分分析算法过程及原理讲解
  14. SuSe Linux防火墙配置指定IP或IP段可访问
  15. 【Flutter 返回桌面不退出app解决办法】
  16. Python 蓝桥杯试题 基础练习 数列排序
  17. (一)大型电商详情页亿级缓存架构简介
  18. 【discuz x3】home_follow.php(广播页面)中$alist = getfollowfeed($vuid, $view, true, $start, $perpage);结果
  19. 泰拉瑞亚加mod之后如何搭建服务器进行联机
  20. 408计算机先学哪个,我的一点初试心得(主要讲讲408怎么复习)

热门文章

  1. 2018 年,程序员要具备哪些核心竞争力?
  2. altium designer芯片引脚间距规则过小
  3. Latex论文排版——图片
  4. git学习笔记[idea整合GitHub,Gitee](非常详细)
  5. 使用Kong和Konga管理微服务和API
  6. 新闻发布系统-用户登录.模糊分页查询
  7. chroot的作用及详解
  8. my read travel
  9. strtotime那些事
  10. PHP开发的仿山楂岛留言程序源码