Lambda
是一个匿名函数,可以把Lambda
表达式理解为是一段可以传递的代码。使用它可以使代码更加的简洁、灵活。作为一种更紧凑的代码风格,使JAVA的语言表达能力得到了提升。
使用举例:
public class LambdaTest {
/**
* @Description 不使用Lambda
*/
public static void test1(){
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("我要上春晚");
}
};
r1.run();
System.out.println("******************************");
Comparator<Integer> com1 = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1,o2);
}
};
System.out.println(com1.compare(12,21));
}
/**
* @Description 使用Lambda
*/
public static void test2(){
Runnable r1 = () -> System.out.println("我要上春晚2");
r1.run();
System.out.println("******************************");
Comparator<Integer> com1 = (o1,o2) -> Integer.compare(o1,o2);
System.out.println(com1.compare(21,12));
System.out.println("*******方法引用***************");
Comparator<Integer> com2 = Integer :: compare;
System.out.println(com2.compare(21,12));
}
}
说明:
代码块:(o1,o2) -> Integer.compare(o1,o2);
格式: ->: lombda操作符
->左边:lombda形参列表(即接口中抽象方法的形参列表)
->右边:lombda体(即重写的抽象方法的方法体)
lombda表达式的使用:(分为6种情况)
格式一:无参、无返回值
Runnable r1 = () -> System.out.println("我要上春晚2");
格式二:需要一个参数、无返回值
Consumer<String> con1 = (String s) -> System.out.println(s);
格式三:需要一个参数、无返回值,类型可以省略
Consumer<String> con1 = (s) -> System.out.println(s);
格式四:需要一个参数、无返回值,参数小括号可以省略
Consumer<String> con2 = s -> System.out.println(s);
格式五:两个或以上参数、多条执行语句,有返回值
Comparator<Integer> com2 = (o1,o2) -> {
System.out.println(o1);
return Integer.compare(o1,o2);
};
格式六:只有一条执行语句,大括号和return都可以省略
Comparator<Integer> com2 = (o1,o2) -> Integer.compare(o1,o2);
lombda表达式的本质:作为函数式接口的实例
Lombda
表达式的六种使用情况举例:
/** @Description 格式一:无参、无返回值 */
public static void geshi1(){
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("我要上春晚");
}
};
//使用lombda表达式
Runnable r2 = () -> System.out.println("我要上春晚2");
}
/** @Description 格式二:需要一个参数、无返回值 */
public static void geshi2(){
Consumer<String> con = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
//使用lombda表达式
Consumer<String> con1 = (String s) -> System.out.println(s);
}
/** @Description 格式三:需要一个参数、无返回值,类型可以省略 */
public static void geshi3(){
//使用lombda表达式,不省略类型
Consumer<String> con1 = (String s) -> {
System.out.println(s);
};
//使用lombda表达式,省略类型即类型推断
Consumer<String> con2 = (s) -> System.out.println(s);
}
/** @Description 格式四:需要一个参数、无返回值,参数小括号可以省略 */
public static void geshi4(){
//使用lombda表达式
Consumer<String> con2 = s -> System.out.println(s);
}
/** @Description 格式五:两个或以上参数、多条执行语句,有返回值 */
public static void geshi5(){
Comparator<Integer> com1 = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
System.out.println(o1);
return Integer.compare(o1,o2);
}
};
//使用lombda表达式
Comparator<Integer> com2 = (o1,o2) -> {
System.out.println(o1);
return Integer.compare(o1,o2);
};
}
/** @Description 格式六:只有一条执行语句,大括号和return都可以省略 */
public static void geshi6(){
//使用lombda表达式
Comparator<Integer> com2 = (o1,o2) -> Integer.compare(o1,o2);
}