lambda的一系列操作

「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

对于集合数据的操作,自从用上了lambda以后,就再也回不去for循环了虽然它不适用于阅读,但写着写着,可读性其实也还好,下面是我用的一些常用的方法,由于我们数据全部封装成了map,所以这里都是map集合做lambda,我们可以创建一个List<Map<String, Object>> cusMap来接收map,

一:排序

  1. 当我们想要遍历输出该集合下某个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里加上&&或者||都可以;

如果后续还有什么,欢迎添加,后面我有也会加上常用的方法

猜你喜欢

转载自juejin.im/post/7034816258310668295