
聊聊工作中常用的Lambda表达式
前言
大家好,我是田螺。
日常开发中,我们很多时候需要用到Java 8
的Lambda
表达式,它允许把函数作为一个方法的参数,让我们的代码更优雅、更简洁。所以整理了一波工作中,我常用的,有哪些Lambda
表达式。看完一定会有帮助的。
1. list转map
工作中,我们经常遇到list
转map
的案例。Collectors.toMap
就可以把一个list
数组转成一个Map
。代码如下:
类似的,还有Collectors.toList()
、Collectors.toSet()
,表示把对应的流转化为list
或者Set
。
2. filter()过滤
从数组集合中,过滤掉不符合条件的元素,留下符合条件的元素。
3. foreach遍历
foreach 遍历list,遍历map,真的很丝滑。
4. groupingBy分组
提到分组,相信大家都会想起SQL
的group by
。我们经常需要一个List做分组操作。比如,按城市分组用户。在Java8之前,是这么实现的:
而使用Java8的groupingBy
分组器,清爽无比:
5. sorted+Comparator 排序
工作中,排序的需求比较多,使用sorted+Comparator
排序,真的很香。
6.distinct去重
distinct
可以去除重复的元素:
7. findFirst 返回第一个
findFirst
很多业务场景,我们只需要返回集合的第一个元素即可:
8. anyMatch是否至少匹配一个元素
anyMatch
检查流是否包含至少一个满足给定谓词的元素。
9. allMatch 匹配所有元素
allMatch
检查流是否所有都满足给定谓词的元素。
10. map转换
map
方法可以帮我们做元素转换,比如一个元素所有字母转化为大写,又或者把获取一个元素对象的某个属性,demo
如下:
11. Reduce
Reduce可以合并流的元素,并生成一个值
12. peek 打印个日志
peek()
方法是一个中间Stream
操作,有时候我们可以使用peek
来打印日志。
13. Max,Min最大最小
使用lambda流求最大,最小值,非常方便。
14. count统计
一般count()
表示获取流数据元素总数。
15. 常用函数式接口
其实lambda离不开函数式接口,我们来看下JDK8常用的几个函数式接口:
-
Function<T, R>
(转换型): 接受一个输入参数,返回一个结果 -
Consumer<T>
(消费型): 接收一个输入参数,并且无返回操作 -
Predicate<T>
(判断型): 接收一个输入参数,并且返回布尔值结果 -
Supplier<T>
(供给型): 无参数,返回结果
Function<T, R>
是一个功能转换型的接口,可以把将一种类型的数据转化为另外一种类型的数据
Consumer<T>
是一个消费性接口,通过传入参数,并且无返回的操作
Predicate<T>
是一个判断型接口,并且返回布尔值结果.
Supplier<T>
是一个供给型接口,无参数,有返回结果。
这几个函数在日常开发中,也是可以灵活应用的,比如我们DAO操作完数据库,是会有个result的整型结果返回。我们就可以用Supplier<T>
来统一判断是否操作成功。如下:
文章转载自公众号:捡田螺的小男孩
