lambda表达式是一个可传递的代码块,可以在以后执行一次或多次。

lambda表达式的语法:

1. 参数 -> 表达式(无需指定返回类型)

   (String first, String second)

  -> first.length() - second.length()

2. 如果代码要完成的计算无法放在一个表达式中,可以把代码放在{}中

  (String first, String second)

  ->

  {

    if (first.length() < second.length())  return -1;

    else if (first.length() > second.length())  return 1;

    else return 0;

  }

3. 即使lambda表达式没有参数,仍然要提供空括号

  () -> { for(int i=0; i>=0;i--) System.out.println(i); }

4. 如果可以推导出表达式的参数类型,则可以忽略其类型

  Comparator<String> comp

    = (first, second)  //编译器可以推导出first和second必然是字符串

      -> first.length()-second.length();

5. 如果方法只有一个参数,而且这个参数的类型可以推导得出,那么也可以省略小括号

  ActionListener listener = event ->

    System.out.println("The time is " + new Date());

函数式接口:对于只有一个抽象方法的接口,需要这种接口的对象时,就可以提供一个lambda表达式。

1. Arrays类的sort方法的第二个参数需要一个Conparator实例。

  Arrays.sort (pianets, (first , second) -> first.lengthO - second.lengthO) ;

方法引用:

1. Timer t = new Timer(1000, event -> System.out.println(event)):

  Timer t = new Timer(1000, Systei.out::println);

  表达式 System.out::println 是一个方法引用( method reference ), 它等价于 lambda 表达式
  x -> System.out.println(x)

  用:: 操作符分隔方法名与对象或类名。主要有 3 种情况:

  (1) object::instanceMethod   例如, this::equals 等同于 x-> this.equals(x)  super::instanceMethod  

  (2) Class::staticMethod   例如:Math::pow 等价于(x,y) -> Math.pow(x, y) 

  (3) Class.instanceMethod

lambda表达式可以捕获外围作用域中变量的值,但是只能引用值不会改变的变量,lambda捕获的变量必须是最终变量。

lamdba表达式的更多相关文章

  1. Java8 Lamdba表达式 001

    在一个已经存在的编程语言里非常少有对现有的生态系统起重大影响的新特性.Lambda表达式对于Java语言就是这样的意义的存在.简单来说,Lambda表达式提供了便利的方式去创建一个匿名的功能.提供了一 ...

  2. C#3.0 Lamdba表达式与表达式树

    Lamdba表达式与表达式树 Lamdba表达式 C#2.0中的匿名方法使得创建委托变得简单起来,甚至想不到还有什么方式可以更加的简化,而C#3.0中的lamdba则给了我们答案. lamdba的行为 ...

  3. java8中对lamdba表达式方法参数传递时,方法重载之后的类型推断

    java8中可以向方法传递一个lamdba表达式,今天看书关于类型推断碰到一个问题: 这个问题我实际操作了一下:得出结论 如果是只有一个方法的情况下,方法参数使用lamdba表达式的时候是不需要写类型 ...

  4. C#高级编程9-第8章 委托、lamdba表达式和事件

    委托.lamdba表达式和事件 1.引用方法 函数指针是一个指向内存位置的指针,不是类型安全的.无法判断实际指向.参数和返回类型也无从知晓..NET委托是类型安全的.定义了返回类型和参数类型,不仅包含 ...

  5. Java8 Lamdba表达式 002

    本篇将讲述lamdba表达式的排序,本例包括一个Player对象的集合[稍后定义],通过每一个player的分数高低对列表的player进行排序.类定义001例如以下 public class Sor ...

  6. Java8 新特性 Lamdba表达式

    Lamdba 表达式为什么出现   Java8是自java延生以来最大的改变,他允许java中的方法和函数成为一等公民(可以在方法间传递),所以就应运而出现了Lamdba表达式,他可以将表达式传递给另 ...

  7. Lamdba表达式的代码使用讲解

    public class Lambda{ public static void main(String[] args) { repeat(10, (i)->System.out.print(&q ...

  8. Asp.net Core C#进行筛选、过滤、使用PredicateBuilder进行动态拼接lamdba表达式树并用作条件精准查询,模糊查询

    在asp.net core.asp.net 中做where条件过滤筛选的时候写的长而繁琐不利于维护,用PredicateBuilder进行筛选.过滤.LInq配合Ef.core进行动态拼接lamdba ...

  9. c#Lamdba表达式与托付

    介绍: "Lambda表达式"(lambda expression)是一个匿名函数,在C#3.0中引入了lambda表达式,它是对匿名函数的一种简化,能够包括表达式和语句,而且可用 ...

  10. 第8章 委托、Lamdba表达式和事件

    本章内容: 委托    Lambda表达式 事件 8.1.3   简单的委托示例 首先定义一个类MathOperations,它有两个静态方法,对double类型的值执行两个操作. public cl ...

随机推荐

  1. scikit-learn 决策树 分类问题

    1.Demo from sklearn import tree import pydotplus import numpy as np #李航p59表数据 #年龄,有工作,有自己房子,信贷情况,类别 ...

  2. SQL Server - AS

    AS 是给现有的字段名/表名指定一个别名的意思.

  3. Spring Cloud 2-Hystrix 断路容错保护(四)

    Spring Cloud  Hystrix  1.RestTemplate 容错 pom.xml application.yml application.java HelloService.java ...

  4. linux select 与 阻塞( blocking ) 及非阻塞 (non blocking)实现io多路复用的示例【转】

    转自:https://www.cnblogs.com/welhzh/p/4950341.html 除了自己实现之外,还有个c语言写的基于事件的开源网络库:libevent http://www.cnb ...

  5. innobackupex的流备份【转】

    并行备份 innobackupex -p123123 --parallel= /backup 节流备份(节省IO) innobackupex -p123123 --throttle= /backup ...

  6. Ubuntu16.04 Liunx下同时安装Anaconda2与Anaconda3

    先根据Ubuntu预装的python2.7来安装Anaconda2,然后将Anaconda3作为其环境安装在envs文件夹下. 重要提示:有一些软件需要py2.7的环境,比如XX-Net, 最好是先安 ...

  7. C# 在webapi项目中配置Swagger

    这篇文章已经过时了,新的主要配置一个就行了,请参照:http://www.cnblogs.com/alunchen/p/7397396.html Swagger是非常流行用于编辑api给前端同事用.或 ...

  8. echarts tree 树型图层级距离设置

    网上找了半天,没有找到设置层级距离的属性,默认是自动适应的,无奈只能改源码,分享出来希望可以帮到有相同需求的... 上github下载echarts源码包,打开src=>chart=>tr ...

  9. highcharts的dataLabels如何去处阴影

    问题: 在使用highcharts生成的图标中dataLabels是有阴影的,通常是影响美观,那么如何去除阴影呢? 原因:是因为highcharts将dataLabels生成的标签是tspan,里面有 ...

  10. C#学习-子类的初始化顺序

    使用了继承之后,当我们初始化一个子类时,除了会调用子类的构造函数外,同时也会调用基类的构造函数. 子类的初始化顺序如下: (1)初始化类的实例字段: (2)调用基类的构造函数: (3)调用子类的构造函 ...