ambda表达式是java8推出的一个特性,使用lambda表达式可以很方便地传递代码块,使得代码更加的简洁,本文就主要说说java中的lambda表达式。
lambda表达式的语法
lambda表达式就是一个代码块,以及必须传入代码的变量规范。lambda表达式格式如下:
1 | (参数列表)->{代码块} |
语法示例:
1 | example 1: |
函数式接口
lambda表达式是不能独立执行的,所以可以由指定目标类型的函数式接口对lambda表达式进行调用。
对于只有一个抽象方法的接口,需要这种接口的对象时,就可以提供一个lambda表达式,这种接口称为函数式接口(functional interface)。
lambda表达式可以转换为一个接口,让lambda表达式更有吸引力了。
1 | //定义一个函数式接口 |
结果输出:
1 | 2 |
又比如要对一个数组进行排序,调用Arrays.sort()方法,第二个参数是一个Comparator对象实例,Comparator就是只有一个方法的接口,所以可以提供一个lambda表达式作为sort方法的参数。
1 | package com; |
结果输出:
1 | Champions; |
方法引用(method reference)
方法引用可以认为是lambda表达式的一个扩展,有时候lambda表达式只是引用了一个已经声明过的方法,为了增加可读性,可以使用方法引用。使用::操作符调用引用方法,常用的主要有4类方法引用:
- objectInstance::instanceMethod引用实例变量的方法
- Class::staticMethod引用类的静态方法
- Class::instanceMethod特定类型的方法引用
- Class::new引用构造方法
对于第一种情况,比如System.out::println,等价于x->System.out.println(x);
对于第二种情况,比如Math::pow,等价于(x,y)->Math.pow(x,y);
对于第三种情况,比如String::compareToIngoreCase,等价于(x,y)->x.compareToIngoreCase(y);
对于第四种情况,比如String::new,等价于()->new String();
1 | //定时器事件:打印事件名称 |