java8新特性 --- Lambda表达式入门
Java 8新特性速度快代码少强大的Stream API便于并行最大化减少空指针异常:OptionalNashorn引擎,允许在JVM上运行JS应用Lambda是一个匿名函数理解为可以传递的代码,使代码更简洁,更灵活,紧凑型代码风格,提高表达能力@Testpublic void test1(){Runnable r1 = new Runnable() {@Overridepublic void r
·
Java 8新特性
- 速度快
- 代码少
- 强大的Stream API
- 便于并行
- 最大化减少空指针异常:Optional
- Nashorn引擎,允许在JVM上运行JS应用
Lambda是一个匿名函数
理解为可以传递的代码,使代码更简洁,更灵活,紧凑型代码风格,提高表达能力
@Test
public void test1(){
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("我爱北京天安门");
}
};
r1.run();
System.out.println("======");
Runnable r2 = () -> System.out.println("我爱北京故宫");
r2.run();
}
@Test
public void test2(){
Comparator<Integer> c = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1,o2);
}
};
System.out.println(c.compare(12, 30));
System.out.println("======");
Comparator<Integer> c1 = (o1,o2) -> Integer.compare(o1,o2);
System.out.println(c1.compare(32, 31));
System.out.println("======");
Comparator<Integer> c2 = Integer :: compare;
System.out.println(c2.compare(32, 31));
}
Lambda 表达式的使用
(o1,o2) -> Integer.compare(o1,o2);
格式:
Lambda 操作符 或 箭头操作符
-
左边:Lambda 形参列表 (接口中的抽象方法的形参列表)
-
右边:Lambda 体 (就是重写的抽象方法的方法体)
本质:作为接口的实例
函数式接口
-
只包含一个接口的抽象方法,是函数式接口
-
一个接口使用 @FunctionalInterface 注解,检查他是否是一个函数式接口,javadoc也会包含一条声明,做出说明
-
函数式接口可以用Lambda表达式表示
函数式接口 | 参数类型 | 返回类型 | 用途 |
---|---|---|---|
Consumer消费性接口 | T | void | 对类型为T的对象应用操作,包含方法,void accept(T t) |
Supplier供给型接口 | 无 | T | 返回类型为T的对象,包含方法:T get() |
Function<T,R>函数式接口 | T | R | 对类型为T的对象应用操作,并返回结果,结果是R类型的对象,R apply(T t) |
Predicate断定式接口 | T | boolean | 确定类型为T的对象是否满足某约束,返回boolean值,包含方法:boolean test(T t) |
补充:
BiFunction
UnaryOperator
BinaryOperator
BiConsumer
BiPredicate
Bi 2个参数类型
方法引用
是Lambda表达式的延伸,lambda表达式作为函数式接口的实例,所以方法引用,就是函数式接口的实例
三种使用场景:
类 :: 静态方法
类::非静态方法
对象::非静态方法
构造器引用
::右边是构造器
更多推荐
已为社区贡献2条内容
所有评论(0)