「这是我参与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里加上&&或者||都可以;
三:分组
对List以某个组号进行分组:
Map<String, List<Map<String, Object>>> Cus = cusMap.stream().collect(Collectors.groupingBy(record -> record.get(GROUP_NO), Collectors.toList()));
四:求和
取集合对象里的某个值进行求和
Double volaAmt = list.stream().filter(m -> m.get("aaa") != null).collect(Collectors.summingDouble(d -> d.get("aaa")));
五:拼接
取集合对象里的某个值进行拼接,会去掉最后一个逗号
String news = list.stream().map(m -> m.get("aaa")).collect(Collectors.joining(",","[","]"));
六:去重
list.stream().distinct().collect(Collectors.toList());
去重+拼接
list.stream().map(m -> m.get(NAME)).distinct().collect(Collectors.joining(","));
根据特定字段去重+排序
list.stream().map(m -> m.get(DATE).toString()).distinct().sorted().collect(Collectors.toList());
对List<Map<String,String>> 根据某个字段去重
list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(m -> m.get("").toString))), ArrayList::new));
对于集合是实体类的去重可用
listDto.stream()
.collect(Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(UserDto::getName))), ArrayList::new));
如果后续还有什么,欢迎添加,后面我有也会加上常用的方法