Lambda表达式
Lambda是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
Lambda表达式左侧:Lambda 表达式的参数列表;
Lambda表达式右侧:Lambda 表达式中所需执行的功能, 即 Lambda体;
Lambda表达式的语法格式
- 语法格式一:无参数,无返回值
public void test1(){
int num = 0; //匿名函数用成员变量,jdk1.7前,必须final修饰
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("Hello World!" + num);
}
};
r.run();
//Lambda表达式写法
Runnable r1 = () -> System.out.println("Hello Lambda!");
r1.run();
}
- 语法格式二:有一个参数,并且无返回值
public void test2(){
//Consumer 消费型接口 属于Java8 内置的四大核心函数式接口之一
//若只有一个参数,小括号可以省略不写
//Consumer<String> con = (x) -> System.out.println(x);
Consumer<String> con = x -> System.out.println(x);
con.accept("武汉加油!");
}
- 语法格式三:两个以上的参数,有返回值,并且 Lambda 体中有多条语句
public void test3(){
Comparator<Integer> com = (x, y) -> {
System.out.println("函数式接口");
return Integer.compare(x, y);
};
}
- 语法格式四:若Lambda体中只有一条语句, return 和 大括号都可以省略不写
public void test4(){
Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
}
- 语法格式五:Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”
public void test5(){
//String[] strs;
//strs = {"aaa", "bbb", "ccc"};
List<String> list = new ArrayList<>();
show(new HashMap<>());
}
public void show(Map<String, Integer> map){
}
二、Lambda 表达式需要“函数式接口”的支持
函数式接口:接口中只有一个抽象方法的接口,称为函数式接口。 可以使用注解 @FunctionalInterface 修饰,可以检查是否是函数式接口
@FunctionalInterface //函数式接口的注解
public interface MyFun {
public Integer getValue(Integer num);
}
//对一个数进行运算
@Test
public void test6(){
System.out.println(operation(100, (x) -> x * x));
System.out.println(operation(200, (y) -> y + 200));
}