Java8特性:分组、提取字段、去重、过滤、差集、交集

总结下自己使用过的特性

  • 将对象集合根据某个字段分组
java 复制代码
//根据id分组
Map<String, List<Bean>> newMap = successCf.stream().collect(Collectors.groupingBy(b -> b.getId().trim()));
  • 获取对象集合里面的某个字段的集合
java 复制代码
List<Bean> list = new ArrayList<>(); 
List<String> strList = list.stream().map(Bean::getId).collect(Collectors.toList());
  • 將集合字段转换成字符串
java 复制代码
List<Long> longList = new ArrayList<>();
String s = longList.stream().map(Object :: toString).collect(Collectors.joining(","));
  • 提取字段去重distinct
java 复制代码
List<String> strList = list.stream().map(Bean::getId).distinct().collect(Collectors.toList());
  • 提取字段去重set
java 复制代码
Set<String> idSet = list.stream().map(Bean :: getId).collect(Collectors.toSet());
  • 过滤filter
java 复制代码
Map<String, Integer> map = new HashMap<>();
//先分组
Map<String, List<Bean>> maps = list.stream().collect(Collectors.groupingBy(Bean::getname));
//循环获取到大小
houseIdMaps.forEach((s, names) -> {
            //房屋地址对应的条数
            map.put(s, names.size());
});
//过滤
//过滤重复的数据 >1
Map<String, Integer> mapRepeat = map.entrySet().stream().filter(entry -> entry.getValue() > 1).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
//过滤未重复的数据 =1
Map<String, Integer> mapNoRepeat = map.entrySet().stream().filter(entry -> entry.getValue() == 1).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
  • 过滤filter,equals
java 复制代码
List<Bean> list1 = list.stream().filter(a -> a.getId().equals("1")).collect(Collectors.toList());
  • 差集(基于java8新特性) 适用于大数据量
java 复制代码
    /**
     * 差集(基于java8新特性) 适用于大数据量
     * 求List1中有的但是List2中没有的元素
     */
    public static List<String> subList(List<String> list1, List<String> list2) {
        Map<String, String> tempMap = list2.parallelStream().collect(Collectors.toMap(Function.identity(), Function.identity(), (oldData, newData) -> newData));
        return list1.parallelStream().filter(str-> !tempMap.containsKey(str)).collect(Collectors.toList());
    }
  • 交集(基于java8新特性) 适用于大数据量
java 复制代码
    /**
     * 交集(基于java8新特性) 适用于大数据量
     * 求List1和List2中都有的元素
     */
    public static List<String> intersectList(List<String> list1, List<String> list2){
        Map<String, String> tempMap = list2.parallelStream().collect(Collectors.toMap(Function.identity(), Function.identity(), (oldData, newData) -> newData));
        return list1.parallelStream().filter(str-> tempMap.containsKey(str)).collect(Collectors.toList());
    }
相关推荐
爬山算法39 分钟前
Hibernate(85)如何在持续集成/持续部署(CI/CD)中使用Hibernate?
java·ci/cd·hibernate
菜鸟233号1 小时前
力扣647 回文子串 java实现
java·数据结构·leetcode·动态规划
qq_12498707531 小时前
基于Java Web的城市花园小区维修管理系统的设计与实现(源码+论文+部署+安装)
java·开发语言·前端·spring boot·spring·毕业设计·计算机毕业设计
h7ml1 小时前
查券返利机器人的OCR识别集成:Java Tesseract+OpenCV优化图片验证码的自动解析方案
java·机器人·ocr
野犬寒鸦1 小时前
从零起步学习并发编程 || 第五章:悲观锁与乐观锁的思想与实现及实战应用与问题
java·服务器·数据库·学习·语言模型
Volunteer Technology2 小时前
Sentinel的限流算法
java·python·算法
岁岁种桃花儿2 小时前
SpringCloud从入门到上天:Nacos做微服务注册中心
java·spring cloud·微服务
jdyzzy2 小时前
什么是 JIT 精益生产模式?它与传统的生产管控方式有何不同?
java·大数据·人工智能·jit
Chasmれ2 小时前
Spring Boot 1.x(基于Spring 4)中使用Java 8实现Token
java·spring boot·spring
汤姆yu2 小时前
2026基于springboot的在线招聘系统
java·spring boot·后端