简化匿名内部类的书写
下面两种写法均可;
Arrays.sort(arr, new Comparator<Integer>() {@Overridepublic 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() {@Overridepublic 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>() {@Overridepublic 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));