首页 > 编程语言 >java List<Map>去重

java List<Map>去重

时间:2023-08-24 18:00:58浏览次数:47  
标签:java medicode jkItemList List mediid mediname put

1.情景展示

在实际开发中,有时我们需要对List集合当中的元素进行去重。

而List当中的元素往往是对象,我们需要根据对象当中的某个或者多个属性值进行判断,才能去重。

如何实现?

2.具体分析

在java当中,Set集合当中的元素具有唯一性。

利用这一特性,我们可以完成去List集合当中的元素进行去重。

3.解决方案

以List<Map>为例,需判断key=mediid和key=medicode二者都相同时,视为重复数据。

如何实现?

public static void main(String[] args) {
    
    List<Map<String, String>> jkItemList = new ArrayList<>(5);
    Map m = new HashMap<String, String>(3);
    m.put("mediid", "608542");
    m.put("medicode", "000000001");
    m.put("mediname", "测试");
    jkItemList.add(m);
    m = new HashMap<String, String>(3);
    m.put("mediid", "608543");// mediid不同
    m.put("medicode", "000000001");
    m.put("mediname", "测试");
    jkItemList.add(m);
    m = new HashMap<String, String>(3);
    m.put("mediid", "608542");
    m.put("medicode", "000000002");// medicode不同
    m.put("mediname", "测试");
    jkItemList.add(m);
    // 重复数据,只有这一条
    m = new HashMap<String, String>(3);// mediid和medicode相同
    m.put("mediid", "608542");
    m.put("medicode", "000000001");
    m.put("mediname", "测试4");
    jkItemList.add(m);
    m = new HashMap<String, String>(3);// mediname不同
    m.put("mediid", "608545");
    m.put("medicode", "000000005");
    m.put("mediname", "测试5");
    jkItemList.add(m);
    
    System.out.println(jkItemList);
    
    
    // 2023年8月24日14:29:30
    // Step1:对接口返回项目列表进行去重
    // 去重依据:mediid+medicode,联合去重
    String mediid; 
    String medicode;

    // 由于Set集合只能容纳一个值,所以,我们可以将联合去重,拼成一个值
    List<String> tempList = new ArrayList<>(jkItemList.size());
    for (Map<String, String> map : jkItemList) {
        mediid = map.get("mediid");
        medicode = map.get("medicode");
        // 合二为一
        tempList.add(mediid + "," + medicode);
    }
    
    // 利用Set的唯一性进行去重
    Set<String> set = new TreeSet<>();
    set.addAll(tempList);
    // Set转List
    List<String> tempList2 = new ArrayList<>(set);
    String mediid2; 
    String medicode2;
    // 去重后的List
    List<Map<String, String>> jkItemList2 = new ArrayList<>(jkItemList.size());
    
    for (String strs : tempList2) {
        mediid2 = strs.split(",")[0];
        medicode2 = strs.split(",")[1];
        
        for (Map<String, String> map : jkItemList) {
            // 
            mediid = map.get("mediid");
            medicode = map.get("medicode");
            if (mediid.equals(mediid2) && medicode.equals(medicode2)) {
                jkItemList2.add(map);
                // 终止本轮循环(避免重复插入的关键)
                break;
            }
        }
        
    }
    
    System.out.println(jkItemList2);
    
}

执行结果:

[{mediname=测试, mediid=608542, medicode=000000001}, {mediname=测试, mediid=608543, medicode=000000001}, {mediname=测试, mediid=608542, medicode=000000002}, {mediname=测试4, mediid=608542, medicode=000000001}, {mediname=测试5, mediid=608545, medicode=000000005}]
[{mediname=测试, mediid=608542, medicode=000000001}, {mediname=测试, mediid=608542, medicode=000000002}, {mediname=测试, mediid=608543, medicode=000000001}, {mediname=测试5, mediid=608545, medicode=000000005}]

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

标签:java,medicode,jkItemList,List,mediid,mediname,put
From: https://www.cnblogs.com/Marydon20170307/p/17654821.html

相关文章

  • Spring Data JPA查询报错java.lang.StackOverflowError hibernate SpringBoot
    toString()造成死循环,重写toString()方法现象测试JPA的多对多查询时,有一个User对象,该User有多个Role,然后报错User@Data@Entity@Table(name="user")publicclassUser{@Id//主键自动增长@GeneratedValue(strategy=GenerationType.IDENTITY)@Co......
  • java原子类AtomicStampedReference
    一、什么是CASCAS,compareandswap的缩写,中文翻译成比较并交换。CAS操作包含三个操作数,内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。二、案例publicstaticintcount=0;privatefinal......
  • java开发中常见的String对象
    String对象加载场内存方式有两种,一种是直接使用“”号创建的加载内存时会会把该字符串直接加载到字符常量中去,并且后文中出现相同使用“”号定义的常量时不会再在内存中创建直接使用第一次创建的字符串,另一种直接使用构造器创建的会创建出一个新的字符串,String常见构造器有String(b......
  • Java限制某段时间内某个请求的次数(代码库)
    关键就是统计次数技巧:1、使用guavacache缓存来计数2、利用引用变量的特性,减少put,只使用get如果重新put赋值,缓存的时间会刷新,比如下面例子的b,一共输出了7次,而a只输出了5次importcom.google.common.cache.Cache;publicclassTest2{privatestaticCache<String,Tes......
  • javascript实现大文件上传下载
    ​ IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag        客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续......
  • java三大特性概述
    内部类将一个类定义在另一个类里面,里面的那个类就称为内部类。内部类的出现,再次打破了Java单继承的局限性。封装封装的定义封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。封装的好处良好的......
  • JavaSE(2)(简单了解idea, 项目结构,运算符,数据转换,原反补码)
    JavaSE(2)(简单了解idea,项目结构,运算符,数据转换,原反补码)p28idea项目结构project项目 > module模块 > package包 > class类拿微信举例,微信就是项目,它下方的四大功能(微信,通讯录,发现,我)就是模块,一个项目是包含一个或多个模块的.以第一个微信模块为例,我们......
  • @Value注解读取yml中的map/list配置
    读取map1、配置文件写法common:map:'{"username":"lisi","password":"123456"}'2、java代码的写法@Value("#{${common.map}}")privateMap<String,Object>map;读取list1、配置文件写法common:list:1,2,32、ja......
  • Java
    https://blog.csdn.net/Eric_splendid/article/details/79898536 测试:1.06GB视频文件,耗时17秒importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.nio.channels.FileChannel;//原文链接:http......
  • JavaScript基础语法
    一、JavaScript概述1.1、JavaScript可以做什么1.1.1、页面的各种动画效果1.1.2、页面的点击/移入响应1.1.3、对客户端数据进行验证1.1.4、各种页面小游戏1.1.5、用途总结嵌入动态文本于HTML页面。对浏览器事件做出响应(对于用户的操作给予响应)。读写HTML元素。在......