二十.Lambda表达式
20.1 概述
- 函数式编程是一种思想特点。
- 函数式编程,忽略面向对象的复杂语法,强调做什么,而不是谁去做。
- Lambda表达式就是函数式思想的体现。
Lambda表达式的格式:
( ) ->{
}
():对应着方法的形参
->:固定格式
{}:方法体
20.2 重载sort方法
//重载sort
Arrays.sort(arr3, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
//o1-o2:升序排列
//o2-o1:降序排列
return o2-o1;
}
});
===========================================
//改写成Lambda表达式:
Arrays.sort(arr4,(Integer o1, Integer o2)-> {
return o2-o1;
}
);
注意点:
-
Lambda表达式基本作用:可以简化匿名内部类的书写
-
Lambda表达式只能简化函数式接口的匿名内部类的写法
-
函数式接口:有且仅有一个抽象方法的接口。
接口上方可以加@FunctionalInterface
-
Lambda表达式使用前提:接口必须是匿名内部类,接口中只能有一个抽象方法。
public class Test {
public static void main(String[] args) {
//调用一个方法时,如果方法的形参是一个接口,那么我们要传递这个接口的实现类对象
//匿名内部类写法
// method(new Swim() {
// @Override
// public void swimimg() {
// System.out.println("正在游泳Img...");
// }
// });
// lambda表达式
method(
()->{
System.out.println("游泳Img...");
}
);
}
//调用一个方法时,如果方法的形参是一个接口,那么我们要传递这个接口的实现类对象
public static void method(Swim s){
s.swimimg();
}
}
interface Swim{
public abstract void swimimg();
}
import java.util.Arrays;
import java.util.Comparator;
public class Test02 {
public static void main(String[] args) {
String[] strArr ={"a","aaa","aa"};
// 匿名内部类写法
Arrays.sort(strArr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length()-o2.length();
}
});
System.out.println(Arrays.toString(strArr));//[a,aa aaa]
// lambda表达式完整格式
Arrays.sort(strArr, (String o1, String o2)->{
return o1.length()-o2.length();
}
);
System.out.println(Arrays.toString(strArr));//[a,aa,aaa]
// lambda表达式简写
Arrays.sort(strArr, ( o1, o2)->o1.length()-o2.length());
System.out.println(Arrays.toString(strArr));//[a,aa,aaa]
}
}