Lambda是什么?
- Lambda是一个匿名函数, 本质是个”语法糖",
- 由编译器推断并帮你转换包装为段 可以传递的代码(将代码像数据一样 进行传递。
可以写出更简洁、更灵活的代码。 - 作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
语法: Lambda表达式由三部分组成:一些参数,一个箭头,一段代码
(参数列表)-> {一些重写方法的代码};
Lambda表达式的简化格式
其实,Lambda表达式的核心原则是:只要可以推导,都可以省略,即可以根据上下文推导出来的内容,都可以省略书写,可以省略的内容如下:
- 参数列表中的数据类型可以不写
- 若参数列表中只有一个参数,则括号可以不写
- 若方法体中的代码只有一行,则大括号、return和分号可以不写(若要省略必须三个一起省略)
循环演示:
List<String> list =Arrays asList("a","b","c");
for(String str :list)[
System.out.println(str);
]
list.forEach(System.ou::println);
Stream过滤器演示:
这里撞见Student类就省略了······
这里给students 直接赋值
List<Student> students = Arrays.asList(
new Student("小王",18,196,10000),
new Student("张三",19,182,6000),
new Student("李四",26,166,5000),
new Student("老王",35,175,3000),
new Student("周五",46,168,2500)
);
//需求是找出年龄大于18,升高大于180的学生进行输出
students.stream()
.filter((x)->x.getAge()>18)
.filter((x)->x.getSize()>180)
.forEach(System.out::println );
//提取所有人的姓名
students.stream()
.map(Student::getName)
.forEach(System.out::println);
常用语法
/**
* 语法1:无参/无返回值
*/
@Test
public void test3(){
//todo 未使用lambda
int num=123;
new Runnable() {
@Override
public void run() {
System.out.println("bat.ke.qq.com"+num);
}
};
//todo 使用lambda
Runnable runnable = () -> System.out.println("bat.ke.qq.com" + num);
runnable.run();
}
/**
* 语法2:有一个参数/无返回值
*/
@Test
public void test4(){
Consumer<String> com=(x)->System.out.println(x);
com.accept("有一个参数/无返回值");
}
/**
* 语法3:有一个参数/可以省略括号
*/
@Test
public void test5(){
Consumer<String> com = x -> System.out.println(x);
com.accept("有一个参数/可以省略括号");
}
/**
* 语法4:又两个以上参数,有返回值,并且Lambda体中有多条语句
*/
@Test
public void test6(){
Comparator<Integer> com=( x,y ) -> {
System.out.println("111");
return Integer.compare(x,y);
};
}
/**
* 语法5:Lambda体中只有一条语句,return和大括号都可以省略不写
*/
@Test
public void test7(){
Comparator<Integer> com=( x,y ) -> Integer.compare(x,y);
}
/**
* 语法6:参数指定类型
*/
@Test
public void test8(){
//上下文推断
Comparator<Integer> com=(Integer x, Integer y) -> Integer.compare(x,y);
}