初试 lambda 表达式
代码示例:
// 传统的匿名内部类
Runnable runnable1 = new Runnable() {
@Override
public void run() {
System.out.println("Hello World!");
}
};
// 使用 Lambda 表达式
Runnable runnable2 = () -> System.out.println("Hello World!");可以看到,lambda 表达式表示的代码更加简洁了。
函数式编程
一种编程思想特点。
lambda 表达式使用前提
必须是接口的匿名内部类,接口中只能有一个抽象方法。
对于只有一个抽象方法的抽象接口,可以加上 @FunctionalInterface 标签。编译器会确认该接口是否只有一个抽象方法。若出现多个方法则编译报错。
——正是因为你的接口只有一个抽象方法,所以你的 lambda 表达式才可以省略掉重写方法名。
示例
原代码:
public class test {
public static void main(String[] args) {
method(new Swim() {
@Override
public void swimming() {
System.out.println("正在游泳");
}
});
}
public static void method(Swim s) {
s.swimming();
}
public interface Swim {
public abstract void swimming();
}
}改写后:
public class test {
public static void main(String[] args) {
method(() -> {
System.out.println("正在游泳");
}
);
}
public static void method(Swim s) {
s.swimming();
}
public interface Swim {
public abstract void swimming();
}
}lambda 表达式省略
原则:省略内容可推导。
- 参数类型可以省略不写
- 如果只有一个参数,不仅参数类型,
()也可以省略不写 - 如果表达式的方法体只有一行,大括号,分号,return 都可以省略不写。但必须同时省略。
依照如上原则,我们的代码还可以省略成下面的形式:
method(() -> System.out.println("Swimming"));小练习
将一个数组内的字符串按照从短到长的顺序排列。
Arrays.sort(arr, ) 方法有两个形参,一个是传入数组,一个是规则模式。我们这里使用比较模式。
import java.util.Arrays;
import java.util.Comparator;
public class Lambda {
public static void main(String[] args) {
String[] arr = {"a", "aaaa", "aaa", "aa"};
// 完整的匿名内部类写法:
// Arrays.sort(arr, new Comparator<String>(){
// @Override
// public int compare(String o1, String o2) {
// return o1.length() - o2.length();
// }
// });
Arrays.sort(arr, (o1, o2) -> o1.length() - o2.length());
System.out.println(Arrays.toString(arr));
}
}
Comments NOTHING