IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Java:List<Map>指定Key去重,差集(针对集合里面只有Map非实体对象) -> 正文阅读

[开发工具]Java:List<Map>指定Key去重,差集(针对集合里面只有Map非实体对象)

ListMap去重,差集(针对集合里面只有Map非实体对象)

问题:由于业务需求,接口的入参出参都是List格式,对于有些查出来的数据,为了防止重复的数据,需要对集合去重,以下分享一种去重的方法:

 /**
     * 该方法可根据指定字段对List<Map>中的数据去重,存在重复的,保存第一组Map
     * @param originMapList 源Map数组
     * @param keys 依据的去重字段
     * @return
     */
    public static List deleteDuplicatedMapFromListByKeys(
             List<Map<String,Object>> originMapList, List keys){
       if(CollectionUtils.isEmpty(originMapList)) return null;
        Map tempMap = new HashMap();
        for (Map originMap : originMapList) {
            String objHashCode = "";
            for (Object key : keys) {
                String value = originMap.get(key) != null ? originMap.get(key).toString()  : "";
                objHashCode += value.hashCode();
            }
            tempMap.put(objHashCode,originMap);
        }
        List valueList = new ArrayList<>(tempMap.values());
        return valueList;
    }

测试:

 public static void main(String[] args) {
        List<Map> list = new ArrayList<>();
        Map<String, Object> map1 = new HashMap<String, Object>();
        map1.put("id", "11");
        map1.put("name", "张翰");
        Map<String, Object> map2 = new HashMap<String, Object>();
        map2.put("id", "11");
        map2.put("name", "霍尊");
        Map<String, Object> map3 = new HashMap<String, Object>();
        map3.put("id", "22");
        map3.put("name", "吴签");
        list.add(map1);
        list.add(map2);
        list.add(map3);
        //创建去重的key的集合
        List<Object> deleteDuplicatedKeys = new ArrayList<>();
        deleteDuplicatedKeys.add("id");
        System.out.println("未去重的集合:"+list);
        List list1 = deleteDuplicatedMapFromListByKeys(list, deleteDuplicatedKeys);
        System.out.println("去重后的集合:"+list1);
    }

测试结果:

未去重的集合:[{name=张翰, id=11}, {name=霍尊, id=11}, {name=吴签, id=22}]
去重后的集合:[{name=霍尊, id=11}, {name=吴签, id=22}]

问题:由于业务需求,接口的入参出参都是List格式,需要对两个集合进行比较,找出集合中的差集

/**
     * 该方法查找两个List<Map>中的数据差集
     * @param originMapList  集合1
     * @param newMapList 集合2
     * @return
     */
    public static List<Map> differenceMapByList(List<Map> originMapList,List<Map> newMapList){
        if(CollectionUtils.isEmpty(originMapList)) return null;
        if (CollectionUtils.isEmpty(newMapList)) return null;
        List<Map> retList = new ArrayList<>();
        List<Map> listAll = new ArrayList<>();
        listAll.addAll(originMapList);
        listAll.addAll(newMapList);
        //过滤相同的集合
        List<Map> listSameTemp = new ArrayList<>();
        originMapList.stream().forEach(a -> {
            if(newMapList.contains(a))
                listSameTemp.add(a);
        });
        retList = listSameTemp.stream().distinct().collect(Collectors.toList());
        //去除重复的,留下两个集合中的差集
        listAll.removeAll(retList);
        retList = listAll;
        return retList;
    }

测试:

 public static void main(String[] args) {
       List<Map> listMap = new ArrayList<>();
        List<Map> list = new ArrayList<>();
        Map<String, Object> map1 = new HashMap<String, Object>();
        map1.put("id", "11");
        map1.put("name", "张翰");
        Map<String, Object> map2 = new HashMap<String, Object>();
        map2.put("id", "11");
        map2.put("name", "霍尊");
        Map<String, Object> map3 = new HashMap<String, Object>();
        map3.put("id", "22");
        map3.put("name", "吴签");
        list.add(map1);
        list.add(map2);
        list.add(map3);
        System.out.println("集合1:"+list);
        Map<String, Object> map4= new HashMap<String, Object>();
        map4.put("id", "22");
        map4.put("name", "吴签");
        listMap.add(map1);
        listMap.add(map4);
        System.out.println("集合2:"+listMap);
        //查找差集
        List list2 = deleteDuplicatedMapFromListByKeys1(list, listMap);
        System.out.println("集合的差集:"+list2);
    }

结果:

集合1[{name=张翰, id=11}, {name=霍尊, id=11}, {name=吴签, id=22}]
集合2[{name=张翰, id=11}, {name=吴签, id=22}]
集合的差集:[{name=霍尊, id=11}]

如果是对象的集合,利用Lambda表达式的方式是很快的哈,但listMap好像不太好用,可能我了解的不深哈,不知道怎么用,只能参考出这种。

参考文章:
java 两个List集合各种情况对比处理
Java : ListMap中 根据map的某个key去重

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:41:58  更:2022-03-16 22:42:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:43:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码