Lambda表达式
java1.8的重要特性
语法糖(可以用简洁的语法实现复杂的功能)
语法:
(参数)->表达式 或 (参数)->{ 语句;}
应用场景
1. 主要用于实现接口
1. 定义类实现接口,创建类的对象
2. 匿名内部类
3.表达式
注:只能实现函数式接口(Functionallnaterface),( 函数式接口 : 也就是接口只有一个方法需要实现)
2. 使用在线程上,例:
3. 使用lambda操作集合
a .集合的遍历
//a.对集合的遍历
list.forEach((a)->System.out.println(a));
System.out.println("------------------------------------------");
//b.排序(x1-x2的顺序)
Collections.sort(list,(x1,x2)->(x1.getAge()-x2.getAge()));
list.forEach((a)->System.out.println(a));
System.out.println("------------------------------------------");
b. 对集合的筛选
//筛选相等的
list.stream().filter((x1)->(x1.getName()=="aa")).forEach((a)-> System.out.println(a));
System.out.println("------------------------------------------");
//筛选第一个为a的(这里有三种筛选:起始,结束,到)
list.stream().filter((x1)->x1.getName().startsWith("a")).forEach((a)-> System.out.println(a));
System.out.println("------------------------------------------");
注 : 这里list.stram相当于收集包装成一个List集合,filter是过滤,并且可以多重筛选
有三种收集器:
Collectors.toList() List收集器,
Collectors.toMap() Map收集器,
Collectors.toSet() Set收集器
c. 转换
集合.stream().map((参数) -> (表达式)).forEach(...);
d. 合并
集合.stream().reduce((参数1,参数2) ->(表达式)).get();
.get()是返回值
e. 限制返回数
集合.stream().limit(3).forEach((x)-> System.out.println(x));
f. 求最大的值
Student student =集合.stream().max(参数1,参数2)->s1.getAge() - s2.getAge()).get();
求年龄最的大的人