为了账号安全,请及时绑定邮箱和手机立即绑定

利用Set 对List<Map<String,Object>> 中的map对象中某一个属性去重

标签:
Java
public static void main(String[] args) {//需求:根据List<Map<String,Object>> 的map中name 属性相同去重/////////////////////////////////////////////以下为造数据/////////////////////////////////////////////////////////////////////////////////////////
          //创建数据,对根据姓名 name 去重
          List<Map<String,Object>>  allList = new ArrayList<>();
          List<Map<String,Object>>  smallList = new ArrayList<>();          Map<String,Object> map1 = new HashMap<>();

          map1.put("id",2019);
          map1.put("name","小明");
          map1.put("id",2017);
          map1.put("name","小王");          Map<String,Object> map2 = new HashMap<>();
          map2.put("id",2020);
          map2.put("name","小明");

          allList.add(map1);
          allList.add(map2);
          smallList.add(map2);/////////////////////////////////////////////以上为造数据/////////////////////////////////////////////////////////////////////////////////////////

          /*将list map 转list pojo,必须要转成对象,因为要去重某一个属性值,而不是去重整个对象,所以必须重写 这个属性值的hashcode 和equals 值*/ 
          List<U> list1 = jsonToList(JSONArray.fromObject(allList).toString(),U.class);
          List<U> list2 = jsonToList(JSONArray.fromObject(smallList).toString(),U.class);          Set<U> set = new HashSet<>();
          set.addAll(list1);
          set.addAll(list2);          for (U u :set){
               System.out.println(u.getName());
          }
     }

运行结果:


webp

image.png

public static   class  U {          private  Integer id;          private  String name;          public Integer getId() {               return id;
          }          public void setId(Integer id) {               this.id = id;
          }          public String getName() {               return name;
          }          public void setName(String name) {               this.name = name;
          }          /**必须重写hashcode 和 equals 方法 */
          @Override
          public int hashCode() {               return name.hashCode(); // 重写此属性值的hashcode,不然就是判断这个对象的hashcode
          }          @Override
          public boolean equals(Object obj) {               if (obj instanceof  U){
                    U o = (U)obj;                    if (o.getName().equals(name)){ //根据属性值进行判断
                         return true;
                    }
               }               return super.equals(obj);
          }
     }
   /**
     * 将json数据转换成pojo对象list
     */
    public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
        JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);        try {            List<T> list = MAPPER.readValue(jsonData, javaType);            return list;
        } catch (Exception e) {
            e.printStackTrace();
        }        return null;
    }
         Set<U> set1 = new HashSet<>();         Set<U> set2 = new HashSet<>();

          set1.addAll(list1);//小王、小明
          set2.addAll(list2);//小明、小哥
          set2.retainAll(set1); //求交集
          set1.addAll(set2); //求并集
          set1.removeAll(set2); //求差集



作者:南京杨小兵
链接:https://www.jianshu.com/p/bbca829654cb


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消