Lambda表达式基础语法
Lambda表达式在Java中引入了一个新的语法元素和操作符“->”,改操作符成为箭头操作符或者Lambda表达式操作符。它将Lambda分为两部分:
左侧:Lambda 表达式的参数列表
右侧:Lambda 表达式要执行的功能,即Lambda体
语法格式一:无参数,无返回值
() -System.out.println(“hello Lambda”);
/**
* 语法格式一:无参数,无返回值
* () -> System.out.println("Hello Lambda")
*/
@Test
public void test1(){
int num = 0;//Jdk以前,必须加final;1.8可以省略
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("Hello World"+num);
}
};
r.run();
System.out.println("-------------------------------------------");
//使用lambda表达式
Runnable r1 = () -> System.out.println("Hello Lambda!!");
r1.run();
}
语法格式二:Lambda需要一个参数,无返回值
(x) -System.out.println(“Hello Lambda”)
/**
* 语法格式二:有一个参数,无返回值
* (x) -> System.out.println("Hello Lambda")
*/
@Test
public void test2(){
Consumer<String> cons = (x) -> System.out.println(x);
cons.accept("我爱孟楠楠");
}
语法格式三:有一个参数,无返回值,小括号可以省略不写
x -System.out.println(“Hello Lambda”)
/**
* 语法格式三:有一个参数,无返回值,小括号可以省略不写
* x -> System.out.println("Hello Lambda")
*/
@Test
public void test3(){
Consumer<String> cons = x -> System.out.println(x);
cons.accept("我爱中国");
}
语法格式四:有两个以上参数,有返回值,并且Lambda体中有多条语句
Comparator<Integercom = (x,y) -{
System.out.println("函数式接口"); return Integer.compare(x,y); };
/**
* 语法格式四:有两个以上参数,有返回值,并且Lambda体中有多条语句
* Comparator<Integer> com = (x,y) -> {
* System.out.println("函数式接口");
* return Integer.compare(x,y);
};
*/
@Test
public void test4(){
Comparator<Integer> com = (x,y) -> {
System.out.println("函数式接口");
return Integer.compare(x,y);
};
com.compare(3,5);
}
语法格式五:若Lambda体中只有一条语句,大括号和return都可以忽略不写
Comparator<Integercom = (x,y) -Integer.compare(x,y);
/**
* 语法格式五:若Lambda体中只有一条语句,大括号和return都可以忽略不写
* Comparator<Integer> com = (x,y) -> Integer.compare(x,y);
*/
@Test
public void test5(){
Comparator<Integer> com = (x,y) -> {
System.out.println("函数式接口");
return Integer.compare(x,y);
};
}
语法格式六:Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”
/**
* 语法格式六:Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”
* Comparator<Integer> com = (Integer x,Integer y) -> Integer.compare(x,y);
* 小括号中的Integer可以省略,因为前面Comparator中已经指定了Integer类型,可以通过类型上下文推断出想x,y的类型
*/
@Test
public void test6(){
Comparator<Integer> com = (x,y) -> Integer.compare(x,y);
}
Lambda表达式需要“函数式接口”的支持
函数式接口:接口中只有一个抽象方法的接口,成为函数式接口。可以使用注解@FunctionalInterface修饰,可以检查是否是函数式接口
