lambda表达式
lambda表达式 JDK8之后推出的一个特性
lambda可以用更简短的方式创建匿名内部类
该语法使得我们可以以“函数式编程”
只是编译器认可,编译器会为我们编译为匿名内部类
注意:lambda创建匿名内部类时,实现的接口必须只能有一个抽象方法,否则不可以使用
语法:
(参数列表)->{
方法体
}
示例:
public class LambdaDemo1 {
public static void main(String[] args) {
Runnable r1 = new Runnable(){
public void run(){
System.out.println("hello");
}
};
//使用lambda表达式重写
Runnable r2 = ()->{
System.out.println("hi");
};
//如果方法只有一句,还可以精简(不写{}缩写为一行)
Runnable r3 = ()->System.out.println("你好");
}
}
方法含有参数时使用lambda
package lambda;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class LambdaDemo2 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("江疏影");
list.add("迪丽热巴");
list.add("郑爽");
//自定义比较,按名字长度比较
//常规使用内部类构造一个比较器
Comparator<String> c1 = new Comparator<String>(){
public int compare(String o1, String o2) {
return o1.length()-o2.length();
}
};
//使用lambda语法简化上述代码
// Comparator<String> c2 = (o1, o2)->{
// return o1.length()-o2.length();
// };
//可以省略大括号简写为一句,但要注意
//有返回值的方法,在忽略大括号的时候return也不能写(编译器会帮您认识的)
Comparator<String> c2 = (o1, o2)->o1.length()-o2.length();
//效果一样
// Collections.sort(list, c1);
// System.out.println(list);
Collections.sort(list, c2);
System.out.println(list);
}
}