Lambda表达式可以理解为:简写的函数式接口的实现。
对于“函数式接口”的简化写法(和其他特性结合构成更加简洁的代码结构)
函数式接口:接口中只有一个抽象方法(可以有默认方法和静态方法),为了保障只有一个抽象方法,可以在接口上添加@FunctionalInterface注解
1.语法
(参数)->{
实现方法的方法体 ;
}
注:参数和方法体只有一个(一条一句)时,()和{}可以省略。
2.用法
- 配合集合的.forEach()方法进行遍历,例如:list.forEach(p->syso(p));
还可以再进行简化list.forEach(system.out::println);(解释下这里每次遍历只有一个值所以参 数不用写啦,方法前用::标识)
- 代替匿名内部类(前提是接口为“函数式接口”),如创建线程:new Thread(()->syso()).start();
再如排序:list.sort((o1,o2)-> return o1.param()-o2.param());
-
Stream是对集合的包装,通常和lambda一起使用。 使用lambdas可以支持许多操作,如 map, filter, limit, sorted, count, min, max, sum, collect 等等
filter():过滤数据,例如:list.stream().filter(p->(p>10)).forEach();(注意后面的lambda体这次试用()括起来的而不是{})
collect():将stream转成集合,例如:list.stream().filter(p->(p>4)).collect(Collectors.toList()/toSet());
distinct():排除相同的元素
limit():取前几条 limit(3)
skip():抛弃前几个
map():接受一个方法做参数,这个方法会作用在每个元素身上,并将其映射成一个新的函数,例如:list.stream().map(Person::getAge).map(String::length).map(s->s.split()).forEach(...);
flatMap():和map有点区别,他能让我们操作到类似List<List<?>>这种结构中的内层容器的元素。流的扁平化如List<List<String>>这种结构,list.stream().flatMap(list->list.stream())
如果对你有帮助的话,可以点个喜欢加个关注哦,谢谢。
(如果哪里写的不对,还请大佬不吝赐教)