一. 表达式入门

Lambda表达式支持将代码块作为方法参数,lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数式接口)的实例,相当于一个匿名的方法。

1.1 Lambda表达式入门

Lambda表达式由三部分组成:

  • 形参列表。形参列表允许省略形参类型,如果只有一个参数,那么形参列表的圆括号也可以删除。
  • 箭头(->)
  • 代码块。Lambda表达式需要返回值,如果Lambda表达式代码块只有一条返回语句,则可以省略return关键字和包裹这条语句的花括号,表达式自动返回这条语句。

Lambda表达式作为参数使用时,相当于一个任何类型的对象。

1.2 Lambda表达式与函数式接口

Lambda 表达式的类型,也被称为“目标类型”,Lambda表达式的目标类型必须是函数式接口

函数式接口代表只包含一个抽象方法的接口,可以包含多个默认方法,静态方法,但只能声明一个抽象方法。

由于Lambda表达式的结果就是被当成对象,因此程序完全可以使用Lambda表达式进行赋值。例如

Runnable r = ()->{
for( int i =0;i <100;i++)
{
System.out.println();
}
};

1.3 Lambda的使用方式

  • 将Lambda表达式赋值给函数式接口类型变量
  • 将Lambda表达式作为函数式接口类型的参数传给某个方法
  • 使用函数时接口对Lambda表达式进行强制类型转换。

例如上面代码可改成

Object obj =(Runnable) ()->{
for( int i =0;i <100;i++)
{
System.out.println();
}
};

Java8在java.util.function包下定义了大量函数式接口,典型的有四类

  • XxxFunction。apply()抽象方法对参数进行处理转换,然后返回一个新的值。
  • XxxConsumer。accept()抽象方法也是对参数进行转换处理,不返回处理结果。
  • XxxxPredicate。test()抽象方法对参数进行判断,返回一个boolean值。
  • XxxSupplier。getAsXxx()抽象方法没有参数,会按某种逻辑算法返回一个数据。

1.4 方法引用与构造器引用

如果Lambda表达式代码块只有一条代码,还可以在代码块中使用方法引用和构造器引用

Lambda表达式支持的方法引用和构造器引用
种类 实例 说明 对应的Lambda表达式
引用类方法 类名::类方法 函数式接口被实现方法的参数传给该类方法作为参数 (a,b,...)->类名.类方法(a,b,...)
引用特定对象的类方法 特定对象::实例方法 函数式接口被实现方法的参数传给该方法作为参数 (a,b,...)->特定对象.实例方法(a,b,...)
引用某类对象的实例方法 类名::实例方法 函数式接口中被实现方法的第一个参数作为调用者,后面的参数全部传给该方法作为参数 (a,b,...)->a.实例方法(a,b,...)
引用构造器 类名::new 函数式接口被实现方法的参数传给该构造器作为参数 (a,b,...)->new 类名(a,b,...)

例如实例引用类方法

interface Converter{
Integer convert(String s);
}
//下面代码使用Lambda表达式创建Converter对象
Converter converter1 = from -> Integer.valueOf(from);

上面代码符合方法引用的条件,可以用下面的代码替换

Converter converter1 = Integer::valueOf;

其他类型的方法引用大同小异,由于篇幅,不在多做介绍

Java 8新增的Lambda表达式的更多相关文章

  1. Java 8:掌握 Lambda 表达式

    本文将介绍 Java 8 新增的 Lambda 表达式,包括 Lambda 表达式的常见用法以及方法引用的用法,并对 Lambda 表达式的原理进行分析,最后对 Lambda 表达式的优缺点进行一个总 ...

  2. Java核心技术-接口、lambda表达式与内部类

    本章将主要介绍: 接口技术:主要用来描述类具有什么功能,而并不给出每个功能的具体实现.一个类可以实现一个或多个接口. lambda表达式:这是一种表示可以在将来的某个时间点执行的代码块的简洁方法. 内 ...

  3. Java疯狂讲义笔记——Lambda表达式

    Java8新增的Lambda表达式 [特性]支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数式接口)的实例. [组成部分]1,形参列表 ...

  4. Java函数式编程和lambda表达式

    为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做.说白了,函数式编程是基于 ...

  5. Java基础教程:Lambda表达式

    Java基础教程:Lambda表达式 本文部分内容引用自OneAPM:http://blog.oneapm.com/apm-tech/226.html 引入Lambda Java 是一流的面向对象语言 ...

  6. java函数式编程之lambda表达式

    作为比较老牌的面向对象的编程语言java,在对函数式编程的支持上一直不温不火. 认为面向对象式编程就应该纯粹的面向对象,于是经常看到这样的写法:如果你想写一个方法,那么就必须把它放到一个类里面,然后n ...

  7. 最全最强 Java 8 - 函数编程(lambda表达式)

    Java 8 - 函数编程(lambda表达式) 我们关心的是如何写出好代码,而不是符合函数编程风格的代码. @pdai Java 8 - 函数编程(lambda表达式) 简介 lambda表达式 分 ...

  8. 【Java】Java8新增的Lambda表达式_学习笔记

    一.Lambda表达式可以简化创建匿名内部类对象 1.不需要new XXX(){}这种繁琐代码. 2.不需要指出重写的方法名. 3.不要给出重写的方法的返回值类型. 4.Lambda相当于一个匿名方法 ...

  9. Java 函数式编程和Lambda表达式

    1.Java 8最重要的新特性 Lambda表达式.接口改进(默认方法)和批数据处理. 2.函数式编程 本质上来说,编程关注两个维度:数据和数据上的操作. 面向对象的编程泛型强调让操作围绕数据,这样可 ...

随机推荐

  1. Git项目协同开发学习笔记2:项目库开发协作相关命令

    之前介绍了如何用git构建项目库及其后续操作的问题,但主要还是个人的操作问题,不太涉及到项目协作方面的问题,所以来说下这块.传送门在这里(后面的可以不用看了). 1.同步 首先就式同步问题:在项目协作 ...

  2. CM和CDH的安装-准备工作

    估计要分开来两篇博客说明,因为截图较多. 1.三个节点cdh1(主节点),cdh2,cdh3 配置就用一张图来说明,因为资源有限 2.版本依赖说明: CDH-5.9.0-1.cdh5.9.0.p0.2 ...

  3. 【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞分析

    0x01 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chichu/ ...

  4. 【RF库Collections测试】Keep In Dictionary

    Name:Keep In DictionarySource:Collections <test library>Arguments:[ dictionary | *keys ]Keeps ...

  5. IIS URL Rewrite Module的防盗链规则设置

    IIS版本:IIS 7.5 URL Rewrite组件:IIS URL Rewrite Module(http://www.iis.net/downloads/microsoft/url-rewrit ...

  6. Win10 快捷键

    Win + D # 最小化桌面 Win + L # 锁屏 Win + E # 打开"我的电脑" Win + I # 打开设置 Win + P # 启动投屏 Win + G # 屏幕 ...

  7. JDBC批量执行executeBatch

    JDBC事务 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态.为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致性可以保持,而当这 ...

  8. WinDBG 技巧:列出模块(DLL/EXE)里面所有的符号(symbol)

    想对某个函数下断点,但是记不清楚的函数具体的名字,这个时侯可以使用x命令来列举所有的符号. 命令格式为: x [选项] 模块名字!符号匹配表达式 这里的符号匹配表达式类似dos的文件名匹配表达式,可以 ...

  9. thinkphp3.2 导航高亮显示

    Controller $action = CONTROLLER_NAME."/".ACTION_NAME; //获取当前页面的‘控制器/操作方法’: $this->assig ...

  10. linux多行注释

    1.多行注释:   1. 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;   2. 在行首使用上下键选择需要注释的多行;   3. 按下键盘(大写)“I”键,进入插入模式 ...