「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战」
对于集合数据的操作,自从用上了lambda以后,就再也回不去for循环了虽然它不适用于阅读,但写着写着,可读性其实也还好,下面是我用的一些常用的方法,由于我们数据全部封装成了map,所以这里都是map集合做lambda,我们可以创建一个List<Map<String, Object>> cusMap来接收map,
一:排序
-
当我们想要遍历输出该集合下某个key的value值时可以通过forEach
cusMap.stream().forEach(o -> System.out.println(o.get("aaa").toString())); 复制代码
2.当我们想要将他们以某个key来进行排序的时候可以这么做(引用sorted),这里这么做是**升序排序,**如果想要第二个字段再进行排序可以在Comparator.comparing后加上.thenComparing(),里面参数和comparing()里的参数一样
List<Map<String, Object>> aaa = cusMap.stream()
.sorted(Comparator.comparing(e -> Double.valueOf(e.get("aaa").toString())))
.collect(Collectors.toList());
复制代码
3.当我们想以**某个key来进行排序(降序)**的时候可以这么做,只是在Comparator.comparing上加上Comparator.reverseOrder()
List<Map<String, Object>> aaa = cusMap.stream()
.sorted(Comparator.comparing(e -> Double.valueOf(e.get("aaa").toString()),Comparator.reverseOrder()))
.collect(Collectors.toList());
复制代码
二:过滤
4.当我们想以某个key来进行过滤数据处理的话可以通过filter来进行处理
cusMap.stream().filter(o -> Double.valueOf(o.get("aaa").toString())>2).collect(Collectors.toList());
复制代码
5.这里的filter也可以用来判断等于某值或者不等于某值来进行过滤
cusMap.stream().filter(o -> "2".equals(o.get("aaa").toString())).collect(Collectors.toList());
复制代码
6.有时候我们可能想要的是不返回list集合了,而是以某个key的value值作为key,来返回以该value为key的Map<String, Map<String, Object>> aaa1,这个时候我们可以使用Collectors.toMap来实现
aaa.stream().collect(Collectors.toMap(k -> k.get("aaa").toString(), Function.identity(), (key1, key2) -> key2))
复制代码
然后get该key获取这个所有的map
7.如果想要任一匹配就返回true或FALSE的话,可以使用anymatch来实现
boolean flag = cusMap.stream().anyMatch(o -> o.get("aaa").toString().equals("3"));
复制代码
只要有任何一个匹配就返回true;如果是多重判断,可以在anymatch里加上&&或者||都可以;
如果后续还有什么,欢迎添加,后面我有也会加上常用的方法