/* 一、Lambda 表达式的基础语法:Java8中引入了一个新的操作符“->”
* 该操作符为箭头操作符或Lambda操作符,箭头操作符将Lambda表达式
* 拆分成两部分
* 左侧:Lambda 表达式的参数列表
* 右侧:Lambda表达式中所需执行的功能,即Lambda体
*
* 语法:
* 语法格式一:无参无返回值
* ()->System.out.println("Hello World");
* 语法二:有一个参数,并且无返回值
* (x)-> System.out.println(x)
* 语法三:若有一个参数,小括号可以不写
* x-> System.out.println(x)
* 语法四:有两个以上的参数,并且 Lambda 体中有多条语句,有返回值
* (x,y)->{
* System.out.println("Hello World");
* return Integer.compare(x,y);
* };
* 语法格式五:若 Lambda 体只有一条return语句,那么大括号和return都可以 不写
* (x,y)->Integer.compare(x,y);
* 语法格式六:lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器会
* 通过上下文推断出数据类型,即类型推断;
*/
public class TestLambda2{
//语法格式一:无参无返回值
@Test
public void test1(){
int num=0;//jdk1.7在匿名内部类中调用局部变量需要加final
//jdk1.8之后,默认添加
Runnable runnable=new Runnable() {
@Override
public void run() {
System.out.println("Hello World");
}
};
System.out.println("**********");
Runnable runnable1=()-> System.out.println("Hello World");
}
//语法二:有一个参数,并且无返回值
@Test
public void test2(){
Consumer<String> consumer=(x)-> System.out.println(x);
consumer.accept("Hello World");
}
//语法四:有两个以上的参数,并且 Lambda 体中有多条语句,有返回值
@Test
public void test3(){
Comparator<Integer> comparator=(x,y)->{
System.out.println("Hello World");
return Integer.compare(x,y);
};
}
//语法格式五:若 Lambda 体只有一条return语句,那么大括号和return都可以不写
@Test
public void test4(){
Comparator<Integer> comparator=(x,y)->Integer.compare(x,y);
}
}
/* 二、Lambda 表达式需要“函数式接口”的支持
* 函数式接口:接口中只有一个抽象方法的接口,称为函数式接口。可以使用注解
* @FunctionalInterface
* java1.8 内置的四大核心函数式接口
*
* Consumer<T>:消费性接口
* void accept(T t);
* Supplier<T>:供给性接口
* T get();
* Function<T,R>:函数型接口
* R apply(T t);
* Predicate<T>:断言型接口
* boolean test(T t);
*/