知识点:Lambda基础语法
(一)Lambda表达式简化匿名内部类的使用
public static void main(String[] args) {
//匿名内部类
Comparator<Integer> com=new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1,o2);
}
};
//Lambda表达式
Comparator<Integer> com1=(x1,x2)-> Integer.compare(x1,x2);
System.out.println(com1.compare(2,1));
}
(二)Lambda表达式的基本语法
//一:Lambda基本语法
/*Java8引入箭头操作符"->"将lambda分成左右两个部分
左侧:Lambda 表达式的参数列表
右侧:Lambda 表达式所执行的功能
语法格式一:无参数,无返回值
() -> System.out.println("Lambda体");
语法格式二:有一个参数,无返回值
(x) -> System.out.println(x);
语法格式三:左侧只有一个参数,小括号可以省略不写
x -> System.out.println(x);
语法格式四:有两个以上参数,有返回值,并且Lambda 体中有多条语句
Comparator<Integer> com=(x,y)->{
System.out.println("函数式接口");
return Integer.compare(x,y);
};
语法格式五:若右侧Lambda体中,只有一条语句,return 和大括号都可以省略不写
Comparator<Integer> com1=(x,y)->Integer.compare(x,y);
语法格式六:Lambda 表达式的参数列表的数据类型可以省略不写,jvm编译器会进行上下文推断出,数据类型 “类型推断”
(Integer x,Integer y) -> Integer.compare();
*/
//二:Lambda 表达式需要 “函数式接口”的支持
/* 函数式接口:
接口中只有一个抽象方法的接口,称为函数式接口,可以使用注解@FunctionalInterface修饰
可以检查该接口是不是函数式接口
*/
import org.junit.Test;
import java.util.Comparator;
import java.util.function.Consumer;
public class test {
@Test
public void test1(){
Runnable r=new Runnable() {
@Override
public void run() {
System.out.println("Lambda体"+num);
}
};
r.run();
System.out.println("----------------------------");
Runnable r1=()->System.out.println("Lambda体"+num);
r1.run();
System.out.println("-------------------------------");
Consumer<String> con=(x)-> System.out.println(x);
con.accept("参数");
System.out.println("--------------------------------");
Comparator<Integer> com=(x,y)->{
System.out.println("函数式接口");
return Integer.compare(x,y);
};
System.out.println(com.compare(20,10));
System.out.println("------------------------------");
Comparator<Integer> com1=(x,y)->Integer.compare(x,y);
System.out.println(com1.compare(20,39));
}
}