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代表相应的集合里的对象

原文地址:https://www.cnblogs.com/xm970829/p/13503723.html