上面章节介绍了 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"); } } }