Lambda 表达式 in java 8
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 表达式常应用场景:
- 将Lambda表达式赋值给函数式接口类型的变量
- 作为函数接口类型的参数传给某个方法
- 使用函数式接口对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的更多相关文章
- Java 终于有 Lambda 表达式啦~Java 8 语言变化——Lambda 表达式和接口类更改【转载】
原文地址 en cn 下载 Demo Java™ 8 包含一些重要的新的语言功能,为您提供了构建程序的更简单方式.Lambda 表达式 为内联代码块定义一种新语法,其灵活性与匿名内部类一样,但样板文件 ...
- Lambda表达式和Java集合框架
本文github地址 前言 我们先从最熟悉的Java集合框架(Java Collections Framework, JCF)开始说起. 为引入Lambda表达式,Java8新增了java.util. ...
- Lambda 表达式,Java中应用Lambda 表达式
一.Lambda 表达式 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 链接:知乎 先举一个普通的 Python 例 ...
- Java 8特性探究(1):通往lambda之路与 lambda表达式10个示例
本文由 ImportNew 函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的ja ...
- 深入浅出 Java 8 Lambda 表达式
摘要:此篇文章主要介绍 Java8 Lambda 表达式产生的背景和用法,以及 Lambda 表达式与匿名类的不同等.本文系 OneAPM 工程师编译整理. Java 是一流的面向对象语言,除了部分简 ...
- Java 8 Lambda表达式10个示例【存】
PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...
- Java语言与JVM中的Lambda表达式全解
Lambda表达式是自Java SE 5引入泛型以来最重大的Java语言新特性,本文是2012年度最后一期Java Magazine中的一篇文章,它介绍了Lamdba的设计初衷,应用场景与基本语法. ...
- Java SE 8 for the Really Impatient读书笔记——Java 8 Lambda表达式
1. lambda表达式的语法 lambda表达式是一种没有名字的函数,它拥有函数体和参数. lambda表达式的语法十分简单:参数->主体.通过->来分离参数和主体. 1.1 参数 la ...
- Java中Lambda表达式的使用
简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因 ...
随机推荐
- [Leetcode] Binary tree level order traversal ii二叉树层次遍历
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...
- [IOI2007]Miners 矿工配餐
link 其实就是一个比较简单的$IOI$题.简单$dp$就行,设$5$维$dp$即可 最后在滚动一下,判一下可行性即可. #include<iostream> #include<c ...
- Java的各种中文乱码解决方法
一.Servlet输出乱码 1. 用servlet.getOutStream字节流输出中文,假设要输出的是String str ="钓鱼岛是中国的,无耻才是日本的". 1.1 若是 ...
- JavaScript中进制之间的转换
JavaScript中进制之间的转换 //十进制转其他 var x = 100; alert(x); alert(x.toString(2)); //转2进制 alert(x.toString(8)) ...
- sleep方法和wait方法的区别?
sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复.调用sleep 不会释放对象锁.wait 是Object 类的方法 ...
- GYM 101875 2018 USP-ICMC
3月自训 (1):10/12 A: 题意:每个人可以连边,最远连到第(i+k)%n个人,边权为这个人与另一个人连边距离,求生成一颗最大生成树的权值和是多少 题解:可以证明的是,我们每一个人都向接下来的 ...
- zabbix问题汇总
1. ::110809.577 resuming IPMI checks on host [10.1.3.41]: connection restored :: seconds :: seconds ...
- 手脱ASProtect v1.23 RC1(有Stolen Code)之以壳解壳
1.载入PEID ASProtect v1.23 RC1 2.载入OD,不勾选内存访问异常,其他异常全部勾选 > 01C06D00 push SoWorker.006DC001 ; //入口点 ...
- SqlServer中循环和条件语句示例!
-- ╔════════╗ -- =============================== ║ if语句使用示例 ║ -- ╚════════╝ declare @a int set @a=12 ...
- CSS3知识之立方体动画效果
效果图: