lambada表达式对集合的过滤和相互转换
lambada表达式对集合的过滤和相互转换
引言:
假设一个场景:
对一个student的list集合进行操作,我要找出年龄大于20的student,重新组成一个student集合。
没有学习lambada表达式的第一想法肯定是通过for循环,再将符合条件的依次加入新的student集合中。思路很简单。但是通过for循环的方式和lambada相比较,差的不是一星半点。
1、实现引言中的场景
假设要过滤的list为studentlist。里面的年龄属性为age,获取方法是getAge()。名字属性是name,获取方法是getName();
如下:
List<Student> newList = studentlist.stream().filter(v -> v.getAge() > 20).collect(Collectors.toList());
像这样,一行代码,我们就可以得到我们想要的结果了。
这个场景同样也是分两部分来完成的。首先通过filter过滤,其次通过Collect.toList()将过滤之后的结果重新组装成一个新的list集合。
2、list集合转换set集合
假设list是student集合
Set<Student> set = list.stream().collect(Collectors.toSet());
3、list转成map集合
假设list是student集合
Map<String,Integer> map = list.stream().collect(Collectors.toMap( getName(),getAge());
这样就获得了一个key为name,value为age的map集合。
总结
这里只将一种list转成list、set、map的方式。如set转成set、list、map和map转成map、list、set是一样的做法。
总之,通过lambda对集合的过滤是通过filter(过滤条件)方法的。
结合之间的转换是通过
1、collect(Collectors.toList())、
2、 collect(Collectors.toSet())、
3、collect(Collectors.toMap(key,value))这三种方式。
额外需要注意的是,将集合转成stream(流)。
list和set是可以直接调用stream()方法从而将自身变成流的形式。
但是map集合不支持,需要先调用entrySet()方法,再调用stream()方法才可将map转成流的形式。
对于lambda所提到的 e-> e.getXX() 之类代码,e到底代表着什么?
我的理解是,集合中的单个元素。不管在哪出现,都是相应集合中的单个元素,对map而言是代表一个entry(键值对)。list、set代表相应的集合里的对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步