上面章节介绍了 Lambda 表达式的标准语法,下面将介绍怎样在 Lambda 标准格式的基础上,使用省略写法来简化 Lambda 表达式。
小括号内参数的类型可以省略,例如:
package com.hxstrive.jdk8.lambda_omit;
import java.util.Arrays;
/**
* 省略类型
* @author hxstrive.com
*/
public class LambdaOmit01 {
public static void main(String[] args) {
String[] strs = {
"hello",
"administrator",
"java"
};
// 省略前
Arrays.sort(strs, (String o1, String o2) -> {
return o1.length() - o2.length();
});
// 省略后
Arrays.sort(strs, (o1, o2) -> {
return o1.length() - o2.length();
});
}
}如果小括号内有且仅有一个参数,则小括号可以省略。例如:
package com.hxstrive.jdk8.lambda_omit;
import java.util.function.Predicate;
/**
* 省略小括号
* @author hxstrive.com
*/
public class LambdaOmit02 {
public static void main(String[] args) {
// 省略前
greaterThan50((e) -> {
return e > 50;
}, 58);
// 省略后
greaterThan50(e -> {
return e > 50;
}, 58);
}
private static void greaterThan50(Predicate<Integer> predicate, int val) {
if(predicate.test(val)) {
System.out.println("大于50");
} else {
System.out.println("小于等于50");
}
}
}如果大括号内有且仅有一个语句,则可以同时省略大括号、return 关键字及语句分号。例如:
package com.hxstrive.jdk8.lambda_omit;
import java.util.function.Predicate;
/**
* 省略大括号
* @author hxstrive.com
*/
public class LambdaOmit03 {
public static void main(String[] args) {
// 省略前
greaterThan50((e) -> {
return e > 50;
}, 58);
// 省略后
greaterThan50(e -> e > 50, 58);
}
private static void greaterThan50(Predicate<Integer> predicate, int val) {
if(predicate.test(val)) {
System.out.println("大于50");
} else {
System.out.println("小于等于50");
}
}
}