Lambda 表达式 in java 8
2017-12-11 16:45
405 查看
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表达式的代码块不允许调用接口中定义的默认方法
相关文章推荐
- 《Java in Action》-1 第3章 Lambda表达式
- 深入探索Java 8 Lambda表达式
- Java Lambda表达式入门
- java Lambda表达式入门
- Java8:Lambda表达式增强版Comparator和排序
- IDEA无法编译java8的lambda表达式提示Error:(16, 48) java: -source 1.5 中不支持 lambda 表达式
- java8 Lambda表达式
- Java 8 lambda表达式
- Java8 Lambda表达式和流操作如何让你的代码变慢5倍
- Java8 - lambda表达式入门
- java lambda表达式
- Java8 Lambda 表达式与 Checked Exception
- Java8之lambda表达式详解
- 从Java5基础开始初识Lambda表达式——走进Java Lambda(一)
- Java Lambda表达式例子
- Java 8 - 通过lambda表达式进行惰性计算
- Java8实战 — Lambda表达式详解
- java8:Lambda表达式入门
- JAVA 8 StreamAPI 和 lambda表达式 总结(二)--Stream基本操作
- Java8初体验(一)lambda表达式语法