简化匿名内部类的书写
下面两种写法均可;
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
Arrays.sort(arr, (Integer o1, Integer o2) -> {
return o1 - o2;
}
);
函数式编程思想,更注重方法体的逻辑,而不是谁去做;
而Lambda表达式就是函数式思想的体现;
Lambda表达式到的格式:
示例:
示例代码:
public class demo1 {
public static void main(String[] args) {
method(
() -> {
System.out.println("正在游泳~~");
}
);
method(new Swim() {
@Override
public void swimming() {
System.out.println("正在游泳~~");
}
});
}
public static void method(Swim swim){
swim.swimming();
}
}
@FunctionalInterface
interface Swim{
public abstract void swimming();
}
有且只能有一个抽象方法
Lambda表达式的省略写法;
以下三种的写法都是可以的;
/**
* lambda的省略规则:
* 1. 参数类型可以省略不写
* 2. 如果只有一个参数,参数类型可以省略,同时()也可以省略
* 3. 如果Lambda表达式的方法体只有一行,大括号,分号,return可以省略不写,并且是需要同时省略
*/
Integer[] arr = {2, 3, 1, 5, 6, 7, 8, 4, 9};
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
// Lambda表达式
Arrays.sort(arr, (Integer o1, Integer o2) -> {
return o1 - o2;
}
);
// Lambda表达式省略写法(代码阅读性较差)
Arrays.sort(arr, (o1, o2) -> o1 - o2);
System.out.println(Arrays.toString(arr));
String[] arr = {"abc", "bcd", "ab", "a", "apple"};
Arrays.sort(arr, (o1, o2) -> o1.length() - o2.length());
System.out.println(Arrays.toString(arr));