可以把Lambda 表达式理解为一种简洁的可传递匿名函数:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。
不使用lambda表达式:
Comparator<Apple> byWeight = new Comparator<Apple>() {
public int compare(Apple a1, Apple a2){
return a1.getWeight().compareTo(a2.getWeight());
}
};
使用lambda表达式:
Comparator<Apple> byWeight = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());
可见Lambda 表达式让你可以简洁地传递代码,其基本语法如下:
(parameters) -> expression
或
(parameters) ->{ statements; }
用法示例:
布尔表达式 (List<String> list) -> list.isEmpty()
创建对象 () -> new Apple(10)
消费一个对象 (Apple a) -> {
System.out.println(a.getWeight());
}
从一个对象中选择/抽取 (String s) -> s.length()
组合两个值 (int a, int b) -> a * b
比较两个对象 (Apple a1, Apple a2) ->
a1.getWeight().compareTo(a2.getWeight())
在函数式接口上使用Lambda 表达式:函数式接口就是只定义一个抽象方法的接口
只有在接受函数式接口的地方才可以使用Lambda 表达式
例如:
public interface Comparator<T> {
int compare(T o1, T o2);
}
public interface Runnable {
void run();
}
用匿名内部类也可以完成同样的事情,但lambda更简洁
Runnable r1 = () -> System.out.println("Hello World 1"); // lambda
Runnable r2 = new Runnable(){ // 匿名类
public void run(){
System.out.println("Hello World 2");
}
};
public static void process(Runnable r){
r.run();
}
process(r1);
process(r2);
process(() -> System.out.println("Hello World 3")); //直接传递的Lambda
原文:https://www.cnblogs.com/superkuan/p/14855638.html