Lambda 表达式 in Java 8

  • Lambda表达式是java 8 新增的特性
  • Lambda表达式主要作用:支持将代码块作为方法参数,允许使用更简洁的代码创建函数式接口的实例,是匿名内部类的一种简化,可以部分取代匿名内部类的作用。
  • 函数式接口:只有一个抽象方法的接口。
  • Lambda表达式又称为匿名函数(anonymous function),表示一类无需定义标识符(函数名)的函数或者子程序,可以看做是一种语法糖

Lambda 表达式语法格式

Lambda表达式在java中由三部分组成:

  • 形参列表:形参列表允许省略形参类型,如果形参列表只有一个参数,形参列表外的圆括号也可以省略
  • 箭头->:箭头不可省略
  • 代码块:如果代码块只有一条语句,允许省略代码块的花括号;更有甚者,只有一条return语句,可以省略return关键字。
interface Eatable{
void taste();
} interface Flyable{
void fly(String weathrer);
} interface Addable{
int add(int a,int b);
} public class LambdaTest {
public void eat(Eatable e) {
e.taste();
System.out.println(e);
}
public void fly(Flyable f) {
f.fly("好天气");
System.out.println(f);
}
public void add(Addable a) {
System.out.println(a.add(5, 3));
} public static void main(String[] args) {
LambdaTest test = new LambdaTest();
test.eat(()->System.out.println("苹果"));
test.fly(weater->{
System.out.println("哈哈哈");
System.out.println("可以飞行");
});
// 省略形参类型 省略花括号
test.add((a,b)->a+b);
}
}

函数式接口

  • 函数式接口是指只包含一个抽象方法的接口,(可有其他默认方法(default修饰)或者类方法)java 8 中有大量的函数式接口如最常见的:Runnable,ActionListener,并提供了@FunctionInterface注解,告诉编译器执行更严格的检查。
Runnbale r =()->{
for(int i =0;i<100;i++){
System.out.println(i);
}
}; // 注意分号
  • Lamdba 表达式的目标类型只能是函数式接口。
  • Lambda 表达式常应用场景:
    1. 将Lambda表达式赋值给函数式接口类型的变量
    2. 作为函数接口类型的参数传给某个方法
    3. 使用函数式接口对Lambda表达式进行强制类型转换
Object obj = (Runnable)()->{
System.out.println(...);
};

方法引用和构造器引用

  • 应用场景:代码块只有一条语句,并且该语句为调用方法或者构造器
  • 应用目的:使Lambda表达式的语法更为简洁
  • 应用方式:::
@FunctionalInterface
interface Converter{
Integer convert(String from);
} // 类方法
Converter con = from->Integer.valueOf(from);
Converter con1 = Integer::valueOf; // 对象方法
Converter con2 = from->"hhhh".indexOf(from);
Converter con3 = "hhhh"::indexOf; // 构造器类似
// ::new

Lambda表达式与匿名内部类的联系和区别

  • Lambda表达式简化了部分匿名内部类的写法(函数式接口),表现性质和匿名内部类一致,可以访问effective final局部变量,和外部类成员变量
  • 匿名内部类的应用范围更广,它可以为任何接口创建实例,也可以服务于抽象类和普通类
  • 注意Lambda表达式的代码块不允许调用接口中定义的默认方法

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

  1. Java 终于有 Lambda 表达式啦~Java 8 语言变化——Lambda 表达式和接口类更改【转载】

    原文地址 en cn 下载 Demo Java™ 8 包含一些重要的新的语言功能,为您提供了构建程序的更简单方式.Lambda 表达式 为内联代码块定义一种新语法,其灵活性与匿名内部类一样,但样板文件 ...

  2. Lambda表达式和Java集合框架

    本文github地址 前言 我们先从最熟悉的Java集合框架(Java Collections Framework, JCF)开始说起. 为引入Lambda表达式,Java8新增了java.util. ...

  3. Lambda 表达式,Java中应用Lambda 表达式

    一.Lambda 表达式 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 链接:知乎 先举一个普通的 Python 例 ...

  4. Java 8特性探究(1):通往lambda之路与 lambda表达式10个示例

    本文由 ImportNew 函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的ja ...

  5. 深入浅出 Java 8 Lambda 表达式

    摘要:此篇文章主要介绍 Java8 Lambda 表达式产生的背景和用法,以及 Lambda 表达式与匿名类的不同等.本文系 OneAPM 工程师编译整理. Java 是一流的面向对象语言,除了部分简 ...

  6. Java 8 Lambda表达式10个示例【存】

    PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...

  7. Java语言与JVM中的Lambda表达式全解

    Lambda表达式是自Java SE 5引入泛型以来最重大的Java语言新特性,本文是2012年度最后一期Java Magazine中的一篇文章,它介绍了Lamdba的设计初衷,应用场景与基本语法. ...

  8. Java SE 8 for the Really Impatient读书笔记——Java 8 Lambda表达式

    1. lambda表达式的语法 lambda表达式是一种没有名字的函数,它拥有函数体和参数. lambda表达式的语法十分简单:参数->主体.通过->来分离参数和主体. 1.1 参数 la ...

  9. Java中Lambda表达式的使用

    简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因 ...

随机推荐

  1. 【bzoj1030】[JSOI2007]文本生成器 AC自动机+dp

    题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是生成一篇长度固 ...

  2. Git更新github项目

    1. 把github上你想要更新修改的项目克隆到本地 $ git clone https://github.com/delav/test.git 2. 根据自己需求对项目进行修改 3. 把项目放到缓存 ...

  3. VS2017常用快快捷键

    VS2017常用快快捷键 VS中代码对齐等快捷键        在VS中,选定代码后,按Ctrl+K+F组合键,可以自动进行代码对齐.        注意:要先按下Ctrl和K,再按下F,因为Ctrl ...

  4. [HDU4532]湫秋系列故事——安排座位

    题面在这里 description 有\(n\)种颜色的小球,每种颜色的小球有\(a_i\)个: 要把它们摆成一排,求相邻小球颜色不相同的摆放方案数. 任意两个合理的安排方法,只要有一个位置的同学不同 ...

  5. [SOJ #47]集合并卷积

    题目大意:给你两个多项式$A,B$,求多项式$C$使得:$$C_n=\sum\limits_{x|y=n}A_xB_y$$题解:$FWT$,他可以解决形如$C_n=\sum\limits_{x\opl ...

  6. [NOIP2017]宝藏 子集DP

    题面:[NOIP2017]宝藏 题面: 首先我们观察到,如果直接DP,因为每次转移的代价受上一个状态到底选了哪些边的影响,因此无法直接转移. 所以我们考虑分层DP,即每次强制现在加入的点的距离为k(可 ...

  7. [APIO2017]商旅 0/1分数规划

    ---题面--- 题解: upd: 在洛谷上被Hack了...思路应该是对的,代码就别看了 感觉有个地方还是非常妙的,就是因为在x买东西,在y卖出,就相当于直接从x走向了y,因为经过中间的城市反正也不 ...

  8. BZOJ5292 & 洛谷4457 & LOJ2513:[BJOI2018]治疗之雨——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5292 https://www.luogu.org/problemnew/show/P4457 ht ...

  9. BZOJ1012:[JSOI2008]最大数——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=1012 https://www.luogu.org/problemnew/show/P1198 现在 ...

  10. BZOJ2553 [BeiJing2011]禁忌 【AC自动机 + dp + 矩乘优化】

    题目链接 BZOJ2553 题解 话说在前,此题卡精度,最好开long double 先建\(AC\)自动机 求期望,逆着求,设\(f[i][j]\)为长度为\(i\)的串,当前匹配AC自动机\(j\ ...